Cambiar el directorio predeterminado cuando hago SSH al servidor

42

Me preguntaba si hay una manera de cambiar el directorio predeterminado en el que me pongo después de que SSH en mi servidor Ubuntu.

El 99% del tiempo cuando inicio sesión en mi servidor, es para acceder a archivos dentro de un directorio específico:

/var/www/websites

¿Hay un archivo de configuración que pueda editar que me asegure de que me coloquen directamente en este directorio cuando inicie sesión?

Bob Flemming
fuente

Respuestas:

62

Hay dos formas de lograr esto:

  • Cambie su directorio de inicio en el servidor a / var / www / websites (esto no es realmente una buena idea)
  • agregar cd /var/www/websitesal final de su .bashrc. Utilizo este en nuestros titiriteros ya que siempre quiero estar en / etc / puppet /ornos / dkaarsemaker allí en lugar de mi homedir :-)
Dennis Kaarsemaker
fuente
Gracias. Edité el archivo bash.bashrc que estaba ubicado en el directorio / etc. Trabajó un placer :)
Bob Flemming
77
Ooh, no haría eso, ya que afecta a todos los usuarios. Mejor editar /home/yourlogin/.bashrc
Dennis Kaarsemaker
66
Es posible que desee poner esto en su .profilelugar .bashrc, pero depende de su caso de uso. .profilese ejecuta solo para inicios de sesión interactivos (por ejemplo, shell) pero .bashrctambién se ejecuta para inicios de sesión no interactivos (por ejemplo, scp, rsync, etc.). Además, es más probable que .profile sea llamado por shells que no son bash (por ejemplo, zsh).
Phord
.bashrc se ejecuta cuando haces "exec bash" para actualizar tu bash. Cambiar el bashrc por un caso de uso especial (aquí inicio de sesión ssh) no es útil.
user3123159
14

Si usa las claves para el inicio de sesión SSH, puede cambiar la ruta anteponiendo command=una clave en ~/.ssh/authorized_keyssu servidor remoto . Ejemplo:

command="cd /var/www/websites ; /bin/bash -l" ssh-rsa AAA.....rest of the key

Está bien generar y usar múltiples claves para el mismo usuario. Una clave en el servidor puede contener el comando y la otra no, de esta manera usted selecciona el comportamiento esperado al momento de iniciar sesión. Simplemente puede envolverlo con local ~/.ssh/config :

Host websites-my-host
    HostName <realhostname>
    IdentityFile ~/.ssh/<key1>  #on the server key with "command"
    User webmaster

Host my-host
    HostName <realhostname>
    IdentityFile ~/.ssh/<key2>  #on the server key without command
    User webmaster

Esto es lo que ocurrirá:

local$ ssh websites-my-host
webmaster@realhostname:/var/www/websites$ _

o:

local$ ssh my-host
webmaster@realhostname:~$ _
gertas
fuente
3
Prefiero esta pregunta sobre la aceptada. Permite que varios usuarios usen el mismo usuario en el servidor y aún así puedan personalizar lo que sucede cuando inicias sesión personalmente. Mucho más flexible y tan correcto como el otro.
testuser
1
Debe tener mucho cuidado aquí, ya que agregar comandos a ~ / .ssh / Authorized_keys afecta a las otras herramientas basadas en ssh como rsync, scp. Estos comandos simplemente se colgarán
warunapww
1
Puede usar en $SSH_ORIGINAL_COMMANDlugar de /bin/bash -lhacer que las herramientas funcionen (en mi caso, hg). O $SHELLsi no quieres codificar para golpear. No estoy seguro de cómo hacer que las herramientas y los inicios de sesión humanos funcionen.
mpen
Solo una advertencia: si ha deshabilitado la Autenticación de contraseña (consulte askubuntu.com/questions/346857/… ) y accidentalmente escribe incorrectamente su cadena de comando, puede bloquear el sistema.
karan.dodia
6

Openssh sshd por defecto acepta estas variables de entorno del cliente:

AcceptEnv LANG LC_*

Puede usar eso para enviar un valor desde el entorno local del cliente al servidor de esta manera:

LC_CDPATH=/var/www/websites ssh -o SendEnv=LC_CDPATH user@server

Puede colocar la directiva SendEnv en ~ / .ssh / config para que no tenga que incluirla en la línea de comandos.

Si coloca lo siguiente en su ~ / .profile (para afectar solo los inicios de sesión interactivos use .profile, para afectar todos los inicios de sesión use .bashrc):

if [ "$LC_CDPATH" -a -d "$LC_CDPATH" ]; then
  cd "$LC_CDPATH";
fi

Luego, cambiará automáticamente el directorio al especificado en la variable de entorno cuando inicie sesión, si se especifica y si es un directorio.

Victor Jerlin
fuente
1
+1 por LC_*truco
Oriente el