¿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.

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?


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 .


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'
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.