¿Cómo SSH en un directorio específico?

39

Con frecuencia inicio sesión en un servidor, luego hago un CD en un directorio específico. ¿Es posible simplificar estos dos comandos en uno?

ssh bob@foo  
cd /home/guest

Me gustaría evitar cambiar cualquier cosa en 'foo' si es posible, ya que tendré que borrarlo con el administrador del servidor. Yo uso bash, pero estoy abierto a respuestas en otros shells.

Spuder
fuente

Respuestas:

22

Simplemente ponga como la última línea de su archivo ~ bob / .bash_profile en foo:

cd /home/guest >& /dev/null

Ahora, cada vez que inicie sesión (ya sea por SSH o de otro modo), se ejecutará el comando cd. No es necesario jugar con ssh.

Sé que escribió que "le gustaría evitar cambiar cualquier cosa en 'foo' si es posible", pero si la cuenta bob @ foo es suya, cambiar su propio .bash_profile debería ser aceptable, ¿no?

DanB
fuente
2
¿Por qué sí? Creo que esto funcionará muy bien. No necesitaré obtener permiso de TI para hacer ese cambio. ¿Podría explicar por qué necesita> & / dev / null?
Spuder
66
Creo que debería ser &> /dev/null. Evita cualquier mensaje de error que pueda mostrarse en caso de que cd no pueda cambiar el directorio a / home / directorio. Si desea ver esos mensajes, puede excluirlos.
konsolebox
55
>&y &>son lo mismo en Bash. Sin embargo, se prefiere el último estilo.
Además, la redirección a / dev / null evita que el nombre del directorio se repita en la pantalla, lo que puede hacer "cd".
DanB
41

Esto funciona con OpenSSH:

ssh -t bob@foo 'cd /home/guest && exec bash -l'

El último argumento se ejecuta en su shell de inicio de sesión. La -tbandera pasó a las sshfuerzas sshpara asignar un pseudo-terminal, que es necesario para un shell interactivo. La -lbandera pasada a bashcomienza bash como un shell de inicio de sesión .

Comunidad
fuente
3
Me pregunto, ¿sería útil agregar la opción -l a bash también? ... && exec bash -l
konsolebox
1
@konsolebox: Esa es una buena idea. He agregado eso a mi respuesta.
17

También puede hacerlo de esta manera, similar a la solución de @ EvanTeitelman:

$ ssh -t bob@foo "cd /tmp ; bash"

O si no conoce el shell en el otro extremo:

$ ssh -t bob@foo "cd /tmp && exec \$SHELL"

O así:

$ ssh -t bob@foo 'cd /tmp && exec $SHELL'
slm
fuente