Mi enfoque preferido es usar el archivo de configuración SSH (descrito a continuación), pero hay algunas posibles soluciones dependiendo de sus usos.
Argumentos de línea de comando
Creo que la mejor respuesta para este enfoque es la respuesta de christianbundy a la respuesta aceptada:
ssh -t example.com "cd /foo/bar; exec \$SHELL -l"
El uso de comillas dobles le permitirá usar variables de su máquina local, a menos que se escapen (como $SHELL
aquí). Alternativamente, puede usar comillas simples, y todas las variables que use serán las de la máquina de destino:
ssh -t example.com 'cd /foo/bar; exec $SHELL -l'
Función bash
Puede simplificar el comando envolviéndolo en una función bash. Digamos que solo quieres escribir esto:
sshcd example.com /foo/bar
Puede hacer que esto funcione agregando esto a su ~/.bashrc
:
sshcd () { ssh -t "$1" "cd \"$2\"; exec \$SHELL -l"; }
Si está utilizando una variable que existe en la máquina remota para el directorio, asegúrese de escapar de ella o ponerla entre comillas simples. Por ejemplo, esto hará un CD al directorio que está almacenado en la JBOSS_HOME
variable en la máquina remota:
sshcd example.com \$JBOSS_HOME
SSH Config File
Si desea ver este comportamiento todo el tiempo para hosts específicos (o cualquiera) con el comando ssh normal sin tener que usar argumentos de línea de comando adicionales, puede establecer las opciones RequestTTY
y RemoteCommand
en su archivo de configuración ssh.
Por ejemplo, me gustaría escribir solo este comando:
ssh qaapps18
pero quiero que siempre se comporte como este comando:
ssh -t qaapps18 'cd $JBOSS_HOME; exec $SHELL'
Entonces agregué esto a mi ~/.ssh/config
archivo:
Host *apps*
RequestTTY yes
RemoteCommand cd $JBOSS_HOME; exec $SHELL
Ahora esta regla se aplica a cualquier host con "aplicaciones" en su nombre de host.
Para obtener más información, consulte http://man7.org/linux/man-pages/man5/ssh_config.5.html