Alterar shell padrão quando o usuário não estiver em / etc / passwd

8

Alguma idéia de como posso mudar a casca 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

Perguntas relacionadas: o usuário não existe no / etc / passwd ao tentar alterar o shell padrão Parece que ele usa o 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

Então eu instalei o pacote relevante do 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
fonte
É mesmo possível?
George Udosen
@ George, verifique a edição.
Abhishek Bhatia
@ George isso não funciona.
Abhishek Bhatia
O caminho shell deve estar em /etc/shellspara chsh-como ferramentas para aceitá-lo.
Muru

Respostas:

1

Aqui está uma dica: /usr/bin/chsh.ldap: "/usr/bin/fish" is an invalid shell. Parece que você deve adicionar /usr/bin/fisha /etc/shells.

pim
fonte
Haha adorável, chsh.ldap -s /usr/bin/zsh myusernameme dá um Segmentation fault.
jchook
Em seguida, ele deve ser relatado aqui: launchpad.net/ubuntu/+source/nss-pam-ldapd/+bugs
pim
1

Espere, é um usuário LDAP, há uma configuração no LDAP que permite alterar o shell padrão para o usuário neles.

Você pode instalar o ldap-account-manager, que fornece um front-end da web para a configuração do ldap.

apt install ldap-account-manager

insira a descrição da imagem aqui

Isso pode ser feito em qualquer servidor no qual você deseja manipular a configuração. Desde que você precisará configurar o servidor nos arquivos de configuração de qualquer maneira. Mas eu recomendo que você o instale no servidor em que o LDAP está em execução, para que você possa se lembrar mais facilmente.

Ziazis
fonte
-1

Para citar ajmitch aqui ,

Você pode definir o peixe como seu shell padrão executando chsh -s. which fish Depois efetue logout e logon novamente. (Para configurá-lo novamente para o bash, é necessário usar a sintaxe do Fish, é claro, como este chsh -s (que bash))

Basta usar chsh -s which fishE certifique-se de sair e fazer login novamente ou reinicie o computador.

A propósito, isso pode ser uma possível duplicata aqui: Como definir o peixe como o shell padrão?

Máx.
fonte
Hmm..chsh funciona apenas se o usuário em / etc / passwd. $ chsh -s `which fish` Password: chsh: user 'jaan' does not exist in /etc/passwd
Abhishek Bhatia
Ah ... sim ... eu não ver que parte dela ...
Max
1
Isso não funciona quando as contas são gerenciadas pelo LDAP. -1
David Foerster