¿Cómo puedo ssh directamente a un directorio en particular?
A menudo tengo que iniciar sesión en uno de varios servidores e ir a uno de varios directorios en esas máquinas. Actualmente hago algo de este tipo:
localhost ~]$ ssh somehost Welcome to somehost! somehost ~]$ cd /some/directory/somewhere/named/Foo somehost Foo]$
Tengo scripts que pueden determinar en qué host y en qué directorio necesito entrar, pero no puedo encontrar una manera de hacer esto:
localhost ~]$ go_to_dir Foo Welcome to somehost! somehost Foo]$
¿Hay una manera fácil, inteligente o de alguna manera de hacer esto?
10 answers
Puedes hacer lo siguiente:
ssh -t xxx.xxx.xxx.xxx "cd /directory_wanted ; bash"
De esta manera, obtendrás un shell directamente en directory_wanted.
Explicación
-t Force pseudo-terminal allocation. This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g. when implementing menu services.
Multiple -t options force tty allocation, even if ssh has no local tty.
- Si no usas
-t
entonces no aparecerá ningún mensaje. - Si no agrega
; bash
entonces la conexión se cerrará y devolverá el control a su máquina local
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-13 17:25:57
Podrías añadir
cd /some/directory/somewhere/named/Foo
A tu archivo .bashrc
(o .profile
o como lo llames) en el otro host. De esa manera, no importa lo que hagas o desde dónde ssh
, cada vez que inicies sesión en ese servidor, cd
irá al directorio adecuado para ti, y todo lo que tienes que hacer es usar ssh
como de costumbre.
De curse, la solución de rogeriopvl también funciona, pero es un poco más detallada, y tienes que recordar hacerlo cada vez (a menos que hagas un alias) por lo que parece un poco menos "divertido".
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-03-09 15:22:48
He creado una herramienta para SSH y CD en un servidor consecutivamente – apropiadamente llamado sshcd. Para el ejemplo que has dado, simplemente usarías:
sshcd somehost:/some/directory/somewhere/named/Foo
¡Avísame si tienes alguna pregunta o problema!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-12 11:33:32
Basado en las adiciones a la respuesta de @rogeriopvl, sugiero lo siguiente:
ssh -t xxx.xxx.xxx.xxx "cd /directory_wanted && bash"
Encadenar comandos mediante &&
hará que el siguiente comando se ejecute solo cuando el anterior haya tenido éxito (en lugar de usar ;
, que ejecuta comandos secuencialmente). Esto es particularmente útil cuando se necesita cd
a un directorio que realiza el comando.
Imagine hacer lo siguiente:
/home/me$ cd /usr/share/teminal; rm -R *
El directorio teminal
no existe, lo que hace que permanezca en el directorio home y quitar todos los archivos con el siguiente comando.
Si usa &&
:
/home/me$ cd /usr/share/teminal && rm -R *
El comando fallará después de no encontrar el directorio.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-14 09:20:13
Utilizo la variable de entorno CDPATH
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-03-09 15:05:52
En mi caso muy específico, solo quería ejecutar un comando en un host remoto, dentro de un directorio específico desde una máquina esclava Jenkins:
ssh myuser@mydomain
cd /home/myuser/somedir
./commandThatMustBeRunInside_somedir
exit
Pero mi máquina no podía realizar el ssh (no podía asignar un pseudo-tty supongo) y me mantuvo dando el siguiente error:
Pseudo-terminal will not be allocated because stdin is not a terminal
Podría evitar este problema pasando "cd a dir + mi comando" como un parámetro del comando ssh (para no tener que asignar un Pseudo-terminal) y pasando la opción-T para indicar explícitamente a el comando ssh que no necesitaba asignación de pseudo-terminal.
ssh -T myuser@mydomain "cd /home/myuser/somedir; ./commandThatMustBeRunInside_somedir"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-13 15:45:01
Otra forma de ir directamente después de iniciar sesión es crear "Alias". Cuando inicie sesión en su sistema, simplemente escriba ese alias y estará en ese directorio.
Ejemplo: Alias = myfolder'/var/www / Folder '
Después de iniciar sesión en su sistema escriba ese alias (esto funciona desde cualquier parte del sistema)
este comando si no está en bashrc funcionará para la sesión actual. Así que también puede agregar este alias a bashrc para usarlo en el futuro
My myfolder = > te lleva a esa carpeta
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-18 21:30:37
Yendo un paso más allá con la idea -t
. Guardo un conjunto de scripts que llaman al siguiente para ir a lugares específicos en mis anfitriones visitados con frecuencia. Los guardo todos en ~/bin
y guardo ese directorio en mi camino.
#!/bin/bash
# does ssh session switching to particular directory
# $1, hostname from config file
# $2, directory to move to after login
# can save this as say 'con' then
# make another script calling this one, e.g.
# con myhost repos/i2c
ssh -t $1 "cd $2; exec \$SHELL --login"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-25 04:11:37
SSH proporciona un medio de comunicación, no sabe nada sobre directorios. Dado que puede especificar qué comando remoto ejecutar (este es - por defecto - su shell), comenzaría allí.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-16 14:09:37
Simplemente modifique su hogar con el comando:
usermod -d /newhome username
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-11 04:13:33