Mon approche préférée consiste à utiliser le fichier de configuration SSH (décrit ci-dessous), mais il existe quelques solutions possibles en fonction de vos utilisations.
Arguments de ligne de commande
Je pense que la meilleure réponse à cette approche est la réponse de christianbundy à la réponse acceptée:
ssh -t example.com "cd /foo/bar; exec \$SHELL -l"
L'utilisation de guillemets doubles vous permettra d'utiliser des variables de votre machine locale, à moins qu'elles ne soient échappées (comme $SHELL
ici). Alternativement, vous pouvez utiliser des guillemets simples, et toutes les variables que vous utilisez seront celles de la machine cible:
ssh -t example.com 'cd /foo/bar; exec $SHELL -l'
Fonction Bash
Vous pouvez simplifier la commande en l'enveloppant dans une fonction bash. Disons que vous voulez juste taper ceci:
sshcd example.com /foo/bar
Vous pouvez faire ce travail en l'ajoutant à votre ~/.bashrc
:
sshcd () { ssh -t "$1" "cd \"$2\"; exec \$SHELL -l"; }
Si vous utilisez une variable qui existe sur la machine distante pour le répertoire, assurez-vous de l'échapper ou de la mettre entre guillemets simples. Par exemple, cela va cd dans le répertoire qui est stocké dans la JBOSS_HOME
variable sur la machine distante:
sshcd example.com \$JBOSS_HOME
Fichier de configuration SSH
Si vous souhaitez voir ce comportement tout le temps pour des hôtes spécifiques (ou n'importe quel) avec la commande ssh normale sans avoir à utiliser des arguments de ligne de commande supplémentaires, vous pouvez définir les options RequestTTY
et RemoteCommand
dans votre fichier de configuration ssh.
Par exemple, je voudrais taper uniquement cette commande:
ssh qaapps18
mais je veux qu'il se comporte toujours comme cette commande:
ssh -t qaapps18 'cd $JBOSS_HOME; exec $SHELL'
J'ai donc ajouté ceci à mon ~/.ssh/config
dossier:
Host *apps*
RequestTTY yes
RemoteCommand cd $JBOSS_HOME; exec $SHELL
Maintenant, cette règle s'applique à tout hôte avec "apps" dans son nom d'hôte.
Pour plus d'informations, voir http://man7.org/linux/man-pages/man5/ssh_config.5.html