el usuario no existe en / etc / passwd cuando intenta cambiar el shell predeterminado

22

Quiero cambiar mi shell predeterminado de tcsh a bash. Así que lo intenté y esto es lo que sucedió:

>sudo chsh userid
Changing the login shell for userid
Enter the new value, or press ENTER for the default
        Login Shell [/xhbin/tcsh]: /bin/bash
chsh: user 'userid' does not exist in /etc/passwd

De hecho, no estoy en / etc / passwd. No se porque.

¿Que puedo hacer?

rmp251
fuente
11
¿Su sistema utiliza autenticación distribuida (por ejemplo, kerberos / winbind)? En ese caso, sus detalles de usuario no aparecerían en el archivo local / etc / passwd (pero deberían ser visibles usando getent passwd <userid>). Creo que si la ejecución chshes compatible en ese caso puede depender de la configuración en/etc/pam.d/
steeldriver

Respuestas:

15

Mi computadora es parte de una red que usa autenticación distribuida, por lo que los detalles de mi usuario no aparecerían en el archivo local / etc / passwd (pero son visibles usando getent passwd userid). (gracias @steeldriver) En mi caso tuve que hacer chsh en una máquina central.

rmp251
fuente
11
¿Puedes explicar qué es una "máquina central"?
Nerrve
En mi caso, me refiero a un conjunto de máquinas dedicadas proporcionadas por la universidad dentro de su red en las que los estudiantes pueden iniciar sesión y usarlas (compartidas). A diferencia de mi propia máquina en mi oficina.
rmp251
44
@ rmp251 Este es exactamente mi escenario. No tengo acceso a la máquina central. ¿Encontró una manera de cambiar el shell de otra manera?
Geek
@ Geek, ¿encontraste la forma de resolverlo?
milushov
13

Hay una solución para gnome-terminal:

  1. Vaya a Editar -> Preferencias de perfil -> Título y comando
  2. Marque Ejecutar un comando personalizado en lugar de mi shell
  3. Proporcionar bashcomo el comando personalizado (o fish, o cualquier cosa)
MrMeszaros
fuente
¡Gracias! Proporcionar un comando para ejecutar inmediatamente cuando abro mi terminal (o nueva pestaña de terminal) a través de la configuración funcionó para mí.
cacoder
Esto también funciona para Konsole y yakuake en KDE.
xgdgsc
6

Si está utilizando la autenticación LDAP por PAM o algo así, debe encontrar su respuesta en su servidor LDAP. Apuntemos a Microsoft AD, en cuyo caso su cuenta de dominio no se encuentra /etc/passwdcuando inicia sesión, pero puede ver su propiedad de usuario en AD, por getent passwd | grep user.

Si al final muestra que su shell es /bin/csh, es porque en su AD hay un atributo para eso. Entonces, si tiene una cuenta de administrador en AD, puede arreglarlo usted mismo. De lo contrario, solo dígale a su administrador de AD que habilite las funciones avanzadas en la pestaña Ver de Usuarios y computadoras de Active Directory> Propiedades de usuario> Atributos de UNIX . Allí puede cambiar el shell de inicio de sesión a /bin/bash.

Asegúrate de no olvidarte de correr:

sudo /opt/pbis/bin/config LoginShellTemplate /bin/bash

Fuente: el usuario no existe en / etc / passwd al intentar cambiar el shell predeterminado .

Masoud
fuente
1
La pregunta era cambiar el shell para un usuario, mientras que la configuración de pbis cambia para todos los usuarios.
kubanczyk
5

Si desea cambiar el shell de su usuario, no necesita convertirse en root. Sólo tipo:

chsh

sin sudoy sin argumentos.


Ver también man chsh:

El comando chsh cambia el shell de inicio de sesión del usuario. Esto determina el nombre
del comando de inicio de sesión inicial del usuario. Un usuario normal solo puede cambiar el
shell de inicio de sesión para su propia cuenta ; el superusuario puede cambiar el inicio de sesión
Shell para cualquier cuenta.
Andrea Corbellini
fuente
La razón por la que usé sudo fue porque no hizo nada sin él. > whoami userid > chsh You may not change the shell for 'userid'.
rmp251
La razón por la que funciona es que chsh no funciona con kerberos
Lennart Rolland
2

Si olvidó su nombre de usuario, puede usar el whoamicomando para recordarlo.

Entonces, intente con:

sudo chsh $(whoami)

Si, de hecho, no existe una línea que comience con su nombre de usuario en el /etc/passwdarchivo (lo que parece inexplicable), puede agregar uno nuevo como este:

nombre de usuario : x: 1000: 1000: su nombre real ,,,: / home / nombre de usuario : / bin / bash

Consulte también: Comprensión del formato de archivo / etc / passwd .

Radu Rădeanu
fuente
1
Una razón por la que su usuario podría no existir en / etc / passwd es si la autenticación no se maneja en esa máquina (por ejemplo, ldap)
MatrixManAtYrService
1

Si está intentando ingresar a un host remoto con un usuario de dominio, es posible que no pueda cambiar su shell utilizando chshcomo se menciona en @Masoud. Pero aquí hay una solución simple para este caso: cada vez que ingrese a la máquina, haga lo siguiente:

ssh my-host -t "zsh --login"

o

ssh my-host -t "cd /data/repos; zsh --login"

Si también desea iniciar sesión directamente en un directorio de trabajo diferente.

dux2
fuente