Estoy tratando de ssh
cambiar automáticamente a un directorio en particular cuando inicio sesión. Intenté que ese comportamiento funcionara usando las siguientes directivas en ~/.ssh/config
:
Host example.net
LocalCommand "cd web"
pero cada vez que inicio sesión, veo lo siguiente:
/bin/bash: cd web: No such file or directory
aunque definitivamente hay una web
carpeta en mi directorio de inicio. Incluso el uso de una ruta absoluta da el mismo mensaje. Para ser claros, si escribo cd web
después de iniciar sesión, llego a la carpeta correcta.
¿Que me estoy perdiendo aqui?
EDITAR:
Las diferentes combinaciones de comillas / rutas absolutas dan diferentes mensajes de error:
LocalCommand "cd web"
/bin/bash: cd web: No such file or directory
LocalCommand cd web
/bin/bash: line 0: cd: web: No such file or directory
LocalCommand cd /home/gareth/web
/bin/bash: line 0: cd: /home/gareth/web: Input/output error
Esto me hace pensar que las citas no deberían estar allí y que hay otro error.
Respuestas:
cd es un shell incorporado. LocalCommand se ejecuta como:Lo que estás buscando hacer realmente no se puede lograr a través de SSH; necesita modificar el shell de alguna manera, por ejemplo, a través de bashrc / bash_profile.<Edición casi una década después ...>
LocalCommand
no es lo que quieres, de todos modos. Eso se ejecuta en su máquina. Que deseaRemoteCommand
. Algo como esto funcionó para mí:fuente
cd
comando en~/.bashrc
el servidor remoto.Esto funciona:
Para crear un directorio si no existe:
Si no agrega
bash
al final de la ruta, salga después de que secd
ejecute el comando. Y si no agrega,--login
entonces su~/.profile
no es de origen.fuente
~/.bash_profile
cd /path/to/your/destination
/path/to/your/destination
fuente
cd /path/to/your/destination
en~/.bashrc
lugar de hacerlo~/.bash_profile
. El resultado debería ser el mismo.~/.bash_profile
o~/.bashrc
solo afectará al usuario actual.Solución más robusta para el caso en que necesita ssh y anular el archivo .bashrc predeterminado. Esto es útil en los casos en que el entorno del servidor remoto tiene múltiples docroots y es utilizado por múltiples usuarios.
Más detallado:
.bashrc_tmp
archivo en el/tmp
directorio del servidor remoto con un contenidocd /path/to/dir
bash
con el archivo de configuración especificado en el paso 1. Esto permite cambiar al directorio deseado y suprimir el predeterminado.bashrc
.alias
, por lo que en el símbolo del sistema del cliente ssh se puede llamar comossh_myserver
fuente
¿Ha habilitado esta directiva en su configuración ssh?
El valor predeterminado para eso es
no
, en cuyo caso suLocalCommand
directiva sería ignorada.Alternativamente, ¿ha intentado agregar el comando a su
.bashrc
archivo?fuente
Así que busqué en muchos sitios web (stackoverflow, este) pero no encontré lo que quería. Terminé creando mi propio script de shell. Lo estoy pegando aquí. También puede copiarlo en un directorio en $ PATH.
Entonces después de esto. Hago:
Nota: es posible que deba cerrar sesión e iniciar sesión nuevamente después de cambiar la variable de ruta
fuente
En su
~/.ssh/config
:Al final de su
~/.bashrc
:Intenté hacer esto usando el paso variable, incluso con una variable exportada, pero estos comandos se ejecutan en diferentes shells.
Al probar lo que estaba tratando de hacer, no recibí un error cuando utilicé la ruta absoluta sin comillas, por cierto. Agregué
; pwd
al final del comando y se muestra el directorio correcto, sin embargo, el directorio en el que termino es~
. No haycd
comandos en mis archivos de inicio de shell. He intentado poner a otra personacd somedir; pwd
en~/.ssh/rc
(con el otro todavía en su lugar). Elconfig
comando se ejecuta antes de que se emita el motd y elrc
comando se emite después, pero antes de que se obtengan los archivos de inicio del shell. Entonces, de nuevo, está sucediendo en un caparazón diferente.Prueba la técnica de pasar por archivo y avísame si te funciona.
fuente
¿Lo has probado sin las comillas? Los únicos ejemplos que he visto no los tienen, por lo que con ellos podría tratarse de ejecutar cd \ web como un comando.
fuente
También puedes probar esto, con la opción
-t
:fuente
Intente usar en su
RemoteCommand
lugar, por ejemplofuente