Mein bevorzugter Ansatz ist die Verwendung der SSH-Konfigurationsdatei (unten beschrieben), aber es gibt einige mögliche Lösungen, die von Ihrer Verwendung abhängen.
Kommandozeilenargumente
Ich denke, die beste Antwort für diesen Ansatz ist die Antwort von christianbundy auf die akzeptierte Antwort:
ssh -t example.com "cd /foo/bar; exec \$SHELL -l"
Wenn Sie doppelte Anführungszeichen verwenden, können Sie Variablen von Ihrem lokalen Computer verwenden, sofern sie nicht maskiert sind (wie $SHELL
hier). Alternativ können Sie einfache Anführungszeichen verwenden, und alle Variablen, die Sie verwenden, stammen vom Zielcomputer:
ssh -t example.com 'cd /foo/bar; exec $SHELL -l'
Bash-Funktion
Sie können den Befehl vereinfachen, indem Sie ihn in eine Bash-Funktion einschließen. Angenommen, Sie möchten nur Folgendes eingeben:
sshcd example.com /foo/bar
Sie können dies zum Laufen bringen, indem Sie Folgendes zu Ihrem hinzufügen ~/.bashrc
:
sshcd () { ssh -t "$1" "cd \"$2\"; exec \$SHELL -l"; }
Wenn Sie eine Variable verwenden, die auf dem Remotecomputer für das Verzeichnis vorhanden ist, müssen Sie sie maskieren oder in einfache Anführungszeichen setzen. Dies wird beispielsweise in das Verzeichnis verschoben, das in der JBOSS_HOME
Variablen auf dem Remotecomputer gespeichert ist :
sshcd example.com \$JBOSS_HOME
SSH-Konfigurationsdatei
Wenn Sie dieses Verhalten für bestimmte (oder beliebige) Hosts mit dem normalen Befehl ssh ständig sehen möchten, ohne zusätzliche Befehlszeilenargumente verwenden zu müssen, können Sie die Optionen RequestTTY
und RemoteCommand
in Ihrer ssh-Konfigurationsdatei festlegen .
Zum Beispiel möchte ich nur diesen Befehl eingeben:
ssh qaapps18
aber möchte, dass es sich immer wie dieser Befehl verhält:
ssh -t qaapps18 'cd $JBOSS_HOME; exec $SHELL'
Also habe ich dies zu meiner ~/.ssh/config
Datei hinzugefügt :
Host *apps*
RequestTTY yes
RemoteCommand cd $JBOSS_HOME; exec $SHELL
Diese Regel gilt nun für jeden Host mit "Apps" im Hostnamen.
Weitere Informationen finden Sie unter http://man7.org/linux/man-pages/man5/ssh_config.5.html