¿Cómo comienzo en bash cuando ssh'ing en mi servidor?


29

Tengo un servidor Debian alojado. Cuando inicio sesión a través de ssh, me saludan con un entorno sh. ¿Cómo lo cambio para comenzar en un entorno bash?

linux  bash  debian  sh 

1
No es realmente una pregunta de programación. En el futuro, probablemente sea mejor hacer preguntas como esta en Unix / Linux .
tylerl

Respuestas:


34

Como usuario normal, puede cambiar su shell de inicio de sesión predeterminado utilizando el chshcomando. Aquí hay un ejemplo:

chsh -s /bin/bash

Otra opción es usar usermod como root:

usermod -s /bin/bash username

1
usermod funcionó de maravilla. ¿Hay alguna forma de configurarlo como predeterminado para bash cuando agrego un nuevo usuario, o tengo que ejecutar el comando cada vez?

Si lo usa adduser, debería establecerlo en bash de manera predeterminada. El valor predeterminado está configurado en /etc/adduser.conf. De lo contrario, especifique el shell explícitamente con useradd.
jordanm

5

Edita /etc/passwddonde la última entrada es el shell predeterminado. Hacerlo /bin/bash.

Alternativamente, puede alterar alterar el valor predeterminado del sistema de /bin/shno ser bash.


1
Oye, ¿qué pasa con el voto negativo de conducir? Por ejemplo, Ubuntu tiene por defecto /bin/shser /bin/dash. Y por lo que vale, las otras dos respuestas son idénticas y logran el mismo fin por diferentes medios. Lo que sea.
Dirk Eddelbuettel

44
Las ediciones manuales de /etc/passwdestán altamente desaconsejadas. Un error de edición puede interrumpir los inicios de sesión para todos los usuarios, lo que requiere medios de recuperación o un inicio en modo de usuario único para reparar. Existen herramientas como usermodpara cambiar /etc/passwd.
jordanm

1
Disparates. Ejecutando Linux desde el '94 aquí. Nunca reventado /etc/passwd.
Dirk Eddelbuettel

2
Es bueno saber que has sido muy cuidadoso. No todos lo han hecho. Otra nota sobre su actualización, que se inicia /bin/bashcomo /bin/shes lo mismo que ejecutarla --posix, lo que puede tener resultados no deseados.
jordanm

Mira, he sido desarrollador / mantenedor de Debian desde 1995 también. Solíamos tener bash por defecto, cambiamos a shells más simples por una variedad de razones. He estado usando /bin/bashcomo mi caparazón todos esos años en todas las máquinas. Necesitas un argumento más concreto.
Dirk Eddelbuettel

2

Debe editar su perfil de usuario, puede hacerlo directamente editando el /etc/passwdarchivo o puede usar el usermodcomando para hacerlo por usted. La sintaxis que está buscando se ve más o menos así:

usermod -s /bin/bash joeuser

1

El shell predeterminado del sistema /bin/shen versiones recientes de Ubuntu está configurado para ser /bin/dash. Simplemente ejecutando el siguiente comando:

sudo dpkg-reconfigure dash

puede volver a cambiarlo al valor predeterminado anterior de /bin/bash.

Con esto, puede lograr el efecto deseado de tener bashun shell interactivo sin cambiar ninguna configuración de usuario (no chsho usermod), y funcionará para todos los usuarios que actualmente tienen configurado el shell /bin/sh.

Solo hay una pequeña desventaja en esto: el tiempo de arranque de Ubuntu puede aumentar ligeramente, ya que dashrequiere menos memoria para cargar y un poco más rápido para ejecutarse (no es de extrañar, tiene características tan limitadas). Pero creo que será bastante difícil medir este efecto, especialmente para el entorno de alojamiento.

Además, a veces es molesto ver scripts de shell que no funcionan correctamente porque usan algunas bashfunciones avanzadas que no son compatibles dash. El uso de esta receta asegurará que esto no suceda.

Para obtener más información, consulte el wiki de Ubuntu sobre este problema .


debe mantener separados los casos de uso: /bin/shse utiliza como intérprete para los scripts de shell compatibles con POSIX; no es necesariamente el mejor shell interactivo; si desea bashser el shell de su sistema, debe configurar su shell de inicio de sesión preferido utilizando chsho las adduserllamadas adecuadas . usar dpkg-reconfigurees una mala elección si el usuario A quiere zsh y el usuario B quiere bash y ambos insisten en tener / bin / sh como su shell predeterminado.
umläute

si el usuario A está configurado explícitamente zshy el usuario B bashlo tendrán. Si userC está configurado para sh, tendrá bash, que es el valor predeterminado actual de Ubuntu para los nuevos usuarios de todos modos
mvp

claro, pero su solución sugirió algo como dpkg-reconfigure zshestablecer zshcomo / bin / sh, y luego dpkg-reconfigure dashestablecer dashcomo / bin / sh, que es un punto muerto; Estoy diciendo principalmente que es preferible establecer el shell de inicio de sesión en el shell que se desea usar en lugar de pasar por aros para hacer / bin / sh un buen shell de inicio de sesión.
umläute

Solo dije que eso dpkg-reconfigure dashpuede tener shsentido bash, en lugar de estar lisiado dash. Todos los demás depósitos seguirán intactos.
mvp

1

Para el caso en el que intenta utilizar una cuenta compartida (por cualquier razón) y no puede cambiar el shell predeterminado, puede ejecutar

ssh -t <user@hostname> bash -l

Si necesita mantener su entorno de otro shell, puede ejecutar ese shell primero; por ejemplo

ssh -t <user@hostname> ksh -c bash -l

Eso funciona bastante bien, pero ¿por qué la -lopción?
nbkhope

@nbkhope se asegurará de que el .bashrc se ejecute por usted.
UKMonkey

0

Ninguno de los dos chsho usermodestaban trabajando para mí, pero he encontrado que puede hacerlo a través de la masilla.

Ve a Connection > SSHy configura el Remote commanda bash.

Tenga en cuenta que no podrá acceder exita su shell predeterminado, solo cerrará la conexión.

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.