it-swarm.com.de

Wählen Sie die von SSH verwendete Shell aus?

Wie stelle ich die Shell ein, die verwendet wird, wenn ein Benutzer SSHs an einen Server sendet. Zum Beispiel kann ich BASH nicht ausstehen und muss ZSH verwenden. Wie mache ich das, damit ZSH zusammen mit meinem Profil geladen wird (.zsh_profile) wenn ich zur Maschine ssh.

Ich möchte auch keine Reihe von Parametern mit ssh übergeben müssen. Kann ich die Standard-Shell nicht festlegen?

38
JP Silvashy

Angenommen, Sie laufen unter Linux, können Sie den Befehl chsh verwenden.

chsh -s /bin/ksh foo
chsh -s /bin/bash username
40
Dominic Barnes

man chsh ändert Shell, funktioniert nicht immer

Alternativ können Sie exec /bin/zsh in Ihrem Bash-Anmeldeskript. Dies ersetzt die Bash-Instanz durch Ihre Shell.

Oder du kannst ssh Host "zsh -l"

13
unknown

Bearbeiten Sie/etc/passwd (wenn Sie die Rechte haben, oder fragen Sie Ihren Systemadministrator), um Ihre Standard-Shell zu ändern.

9
Valentin Rocher

Ich bin nicht sicher, wie Sie Ihr lokales .zshrc Auf dem Remote-Server ablegen können (ohne es dort dauerhaft zu speichern). Dies funktioniert für mich, um meine Anmeldeshell auf dem Remote-Server zu ändern.

Da es sich um ein freigegebenes Konto handelt, kann ich zsh mit dieser Methode nur für mich selbst verwenden.

Fügen Sie dies Ihrer ~/.ssh/config - Datei auf Ihrem lokalen Computer hinzu.

Host yourServer
    HostName <IP, FQDN or DNS resolvable name>
    IdentityFile ~/.ssh/<your keyfile>
    RemoteCommand zsh -l
    RequestTTY force
    User <yourUsername>

Es könnte einen hackigen Weg geben, um das zu erreichen, wonach Sie suchen, wie unten.

[~ # ~] Warnung [~ # ~] Dies kommt ohne Garantie und sieht nicht 'weise' aus, aber ich habe es getan hat es geschafft, meine lokale Datei auf den Server zu stellen und sie damit in der Login-Shell zu quellen.

Host someHost
    HostName someIP
    IdentityFile ~/.ssh/somekey.pem
    RemoteCommand zsh -l -c 'sleep 1; source /tmp/somefile; zsh'
    PermitLocalCommand yes
    LocalCommand bash -c 'sftp %[email protected]%h <<< "put /tmp/somefile /tmp/somefile"'
    RequestTTY force
    User someUser

Wie es funktioniert?

  • RemoteCommand definiert, was auf der Remote-Seite ausgeführt werden muss.
  • LocalCommand definiert, was auf lokal ausgeführt werden muss, wodurch Ihre lokale Datei zur Beschaffung auf den Remote-Server kopiert wird. Hier ist der Haken, es passiert erst nach 'erfolgreicher' Verbindung zum Remote-Host.

Bedeutung:

  1. Ihre Verbindung zur Fernbedienung sollte offen und lebendig sein
  2. Ihre Remote-Shell verfügt noch nicht über die Datei, daher muss sie warten, bis die Datei vorhanden ist. Ergo sleep
  3. Ihr lokaler Benutzer verwendet sftp, um Ihre Datei auf dem Remote-Server abzulegen. Der Remote-Server wacht von sleep auf und bezieht Ihre Skripte.

Es ist super hackisch, ich würde gerne wissen, ob es auch einen besseren Weg gibt.

Update: Dies kann anstelle der 'langen' Schlafzeit verwendet werden:
RemoteCommand zsh -l -c 'while [[ ! -f /tmp/somefile ]]; do sleep 0.05; done; source /tmp/somefile; zsh'

6
sdkks

Wenn Sie Ihre Standard-Shell nicht ändern können, ssh -t [email protected] 'zsh -l' funktioniert.

Das -t flag erzwingt eine Pseudo-tty-Zuordnung, und das -l flag erzeugt ein Login Shell .

6
Mark