Wie stelle ich die Shell ein, die verwendet wird, wenn ein Benutzer SSHs zu einem Server sendet? Zum Beispiel kann ich BASH nicht ausstehen und muss ZSH verwenden. Wie kann ich es so gestalten, dass ZSH zusammen mit meinem Profil ( .zsh_profile
) geladen wird, wenn ich auf den Computer sshe .
Ich möchte auch nicht eine Reihe von Parametern mit ssh übergeben müssen. Kann ich nicht die Standard-Shell festlegen?
/etc/shells
die Shell ausgewählt werden kann.passwd
Paket .man chsh
Wechselt die Shell, funktioniert nicht immerAlternativ können Sie auch
exec /bin/zsh
Ihr Bash-Anmeldeskript verwenden. Dadurch wird die Bash-Instanz durch Ihre Shell ersetzt.Oder du kannst es tun
ssh host "zsh -l"
quelle
L
ssh -t
ist erforderlich, um ein TTY für die letzten Optionen zu erhalten. Wenn ein Befehl (wiezsh -l
) bereitgestellt wird, führt OpenSSH standardmäßig eine Nicht-Login-Shell aus, die Ihnen kein TTY zuweist, und-l
ändert dies nicht (da dies nach der Anmeldung ausgeführt wird).Bearbeiten Sie / etc / passwd (wenn Sie die Rechte haben oder Ihren Systemadministrator fragen), um Ihre Standard-Shell zu ändern.
quelle
Wenn Sie Ihre Standard-Shell nicht ändern können,
ssh -t user@host 'zsh -l'
funktioniert dies.Das
-t
Flag erzwingt eine Pseudotty-Zuweisung und das-l
Flag erzeugt eine Login-Shell .quelle
Ich bin nicht sicher, wie Sie Ihren lokalen
.zshrc
Server auf einen Remote-Server übertragen können (ohne ihn dauerhaft dort zu speichern). Dies funktioniert für mich, wenn ich meine Anmeldeshell auf einem Remote-Server ändere.Da es sich um ein freigegebenes Konto handelt, kann
zsh
ich es mit dieser Methode nur für mich selbst verwenden.Fügen Sie dies zu Ihrer
~/.ssh/config
Datei auf Ihrem lokalen Computer hinzu.Es könnte einen hackigen Weg geben, um das zu erreichen, wonach Sie suchen, wie unten.
WARNUNG Dies kommt ohne Garantie und sieht nicht "klug" aus, aber ich habe es geschafft, meine lokale Datei auf den Server zu stellen und sie mit dieser in der Anmeldeshell zu speichern.
Wie es funktioniert?
RemoteCommand
Definiert, was auf der Remote-Seite ausgeführt werden muss.LocalCommand
Definiert, was lokal ausgeführt werden muss. Mit dieser Option wird Ihre lokale Datei auf den Remote-Server kopiert, um sie zu beziehen. Hier ist der Haken, es passiert erst nach "erfolgreicher" Verbindung zum Remote-Host.Bedeutung:
sleep
sftp
, um Ihre Datei auf einem Remote-Server abzulegen, der Remote-Server wird vonsleep
Ihren Skripten aktiviert und gibt einen Quellcode aus.Es ist super hackisch, ich würde gerne wissen, ob es auch einen besseren Weg gibt.
Update: Dies kann anstelle von "langer" Ruhezeit verwendet werden:
RemoteCommand zsh -l -c 'while [[ ! -f /tmp/somefile ]]; do sleep 0.05; done; source /tmp/somefile; zsh'
quelle