especificar shell para la sesión ssh

Estoy iniciando sesión en un servidor remoto a través de ssh como usuario www-data. El usuario www-data en el servidor tiene su shell predeterminado establecido en /bin/sh, y cuando inicio sesión, aparece el tablero como mi shell. Entonces puedo escribir bash y obtener bash shell.

Me gustaría iniciar sesión en bash directamente, cuando Entré. Pero no quiero cambiar el shell predeterminado en el servidor. Quiero que mi cambio solo afecte a la sesión de SSH.

He intentado poner command="/bin/bash" delante de mi clave pública en .ssh/authorized_keys, pero esto tiene otro efecto secundario: mientras que bash funciona como shell predeterminado al iniciar sesión, scp dejó de funcionar. Ya no puedo archivos scp hacia o desde el servidor remore.

¿Cómo puedo configurar bash como shell predeterminado para la sesión ssh, sin romper otras aplicaciones?

Comentarios

  • ssh [email protected] /bin/bash ¿no ' no funcionó?
  • @DopeGhoti: I ' m También tengo curiosidad, pero sospecho que ' tendrá el mismo problema que con su

sintaxis.

  • Lo dudo, ya que especificarlo en la ssh línea de comandos no debería tener ningún efecto sobre scp.
  • Responder

    Tengo un problema similar en un sistema Yo uso (el shell predeterminado es bash, quiero ksh93 y chsh no trabajo).

    Mi solución, adaptada a su situación, es exec el shell deseado de ~/.profile, que Dash lee al inicio. Bash no toca ~/.profile a menos que «no encuentre ~/.bash_profile o ~/.bash_login (en ese orden, consulte el manual de Bash).

    # in ~/.profile: if [ "$SHELL" != "/usr/bin/bash" -a -n "$SSH_TTY" -a -x /usr/bin/bash ]; then export SHELL="/usr/bin/bash" exec $SHELL -l fi 

    SSH establece SSH_TTY en sesiones SSH interactivas, por lo que » Está comprobando si está configurado (cadena no vacía) antes de asegurarse de que Bash esté disponible y ejecutarlo. Estoy configurando y exportando SHELL en caso de que alguna otra aplicación lo vea, y para evitar que Bash se ejecute en un bucle infinito debido a que faltan ambos ~/.bash_profile y ~/.bash_login y así intentar ejecutar ~/.profile nuevamente.

    Comentarios

    • gracias. Con una modificación importante, el enfoque sugerido funciona. La ejecución de $SHELL -l provocó una bomba de horquilla. Aparentemente, bash -l lee .profile también. Al omitir -l, todo funciona como se esperaba.
    • Probablemente porque le faltan ambos ~/.bash_profile y ~/.bash_login?
    • Ver mi edición de mi respuesta, lo que hace que if falla si ' ya estamos ejecutando Bash (no estoy seguro de que esto sea realmente necesario ya que debería recoger los otros archivos de inicio).

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *