Cambiar el shell predeterminado cuando el usuario no está en / etc / passwd

8

¿Alguna idea sobre cómo puedo cambiar la concha para pescar?

$ sudo usermod -s /usr/bin/fish jaan
usermod: user 'jaan' does not exist in /etc/passwd
$ getent passwd $USER
jaan:x:15466:94:Jaan Altosaar:/home/jaan:/bin/zsh

Preguntas relacionadas: el usuario no existe en / etc / passwd cuando intenta cambiar el shell predeterminado Parece que usa ldap.

$ cat /etc/nsswitch.conf
passwd:         compat ldap
group:          compat ldap
shadow:         compat ldap

# Having the NOTFOUND=return bit was breaking dns resolution on web1 and web2. But we probably
# don't want any of the mdns stuff so let's get rid of it all.
#hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4
hosts:          files dns

networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       ldap
automount:      ldap

Así que instalé el paquete relevante ldap.

$ chsh.ldap
LDAP password for jaan:
Enter the new value, or press ENTER for the default
  Login Shell [/bin/zsh]: /usr/bin/fish
Traceback (most recent call last):
  File "/usr/bin/chsh.ldap", line 69, in <module>
    constants.NSLCD_USERMOD_SHELL: shell,
  File "/usr/share/nslcd-utils/nslcd.py", line 128, in usermod
    assert con.get_response() == constants.NSLCD_RESULT_BEGIN
  File "/usr/share/nslcd-utils/nslcd.py", line 103, in get_response
    return self.read_int32()
  File "/usr/share/nslcd-utils/nslcd.py", line 71, in read_int32
    return _int32.unpack(self.read(_int32.size))[0]
struct.error: unpack requires a string argument of length 4
$ which fish
/usr/bin/fish
$ chsh.ldap
LDAP password for jaan:
Enter the new value, or press ENTER for the default
  Login Shell [/bin/zsh]: "/usr/bin/fish"
/usr/bin/chsh.ldap: "/usr/bin/fish" is an invalid shell
$ /usr/bin/fish
(standard_in) 1: syntax error
Welcome to fish, the friendly interactive shell
Abhishek Bhatia
fuente
¿Es eso posible?
George Udosen
@ George por favor revisa editar.
Abhishek Bhatia
@ George, esto no funciona.
Abhishek Bhatia
El camino de la cáscara debe estar en /etc/shellspara chsh-como herramientas para aceptarla.
muru

Respuestas:

1

Aquí tiene una pista: /usr/bin/chsh.ldap: "/usr/bin/fish" is an invalid shell. Parece que deberías agregar /usr/bin/fisha /etc/shells.

pim
fuente
Jaja encantador, chsh.ldap -s /usr/bin/zsh myusernameme da un Segmentation fault.
jchook
Entonces debería informarse aquí: launchpad.net/ubuntu/+source/nss-pam-ldapd/+bugs
pim
1

Espera, es un usuario LDAP, hay una configuración en LDAP que te permite cambiar el shell predeterminado para el usuario en ellos.

Puede instalar ldap-account-manager que le proporciona un contenido web para la configuración de ldap.

apt install ldap-account-manager

ingrese la descripción de la imagen aquí

Esto se puede hacer en cualquier servidor en el que desee manejar la configuración. Ya que de todos modos deberá configurar el servidor en los archivos de configuración. Pero le recomendaría que lo instale en el servidor que tiene el ldap realmente ejecutándose, para que pueda recordarlo más fácilmente.

Ziazis
fuente
-1

Para citar a ajmitch aquí ,

Puede configurar fish como su shell predeterminado ejecutando chsh -s. which fish Luego, cierre sesión y vuelva a iniciarla.

Simplemente use chsh -s which fishY asegúrese de cerrar sesión y volver a iniciar sesión o reiniciar su computadora.

Por cierto, esto podría ser un posible duplicado aquí: ¿Cómo configuro fish como el shell predeterminado?

Max
fuente
Hmm..chsh funciona solo si el usuario en / etc / passwd. $ chsh -s `which fish` Password: chsh: user 'jaan' does not exist in /etc/passwd
Abhishek Bhatia
Ah ... sí ... no vi esa parte ...
Max
1
Eso no funciona cuando LDAP administra las cuentas. -1
David Foerster