Изменить оболочку по умолчанию, когда пользователь не находится в / etc / passwd

8

Любые идеи о том, как я могу изменить раковину на рыбу?

$ 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

Вопросы, связанные с данной : пользователь не существует в / etc / passwd при попытке изменить оболочку по умолчанию. Похоже, он использует 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

Поэтому я установил соответствующий пакет 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
Абхишек Бхатия
источник
Это вообще возможно?
Джордж Удосен
@ Джордж, пожалуйста, проверьте редактировать.
Абхишек Бхатия
Посмотрите на этот unix.stackexchange.com/questions/253833/…
Джордж Удосен
@ Джордж это не работает.
Абхишек Бхатия
Путь оболочка должна быть /etc/shellsдля chsh-как инструментов , чтобы принять его.
Муру

Ответы:

1

Вот подсказка: /usr/bin/chsh.ldap: "/usr/bin/fish" is an invalid shell. Кажется, что вы должны добавить /usr/bin/fishк /etc/shells.

ПИМ
источник
Ха-ха, милый, chsh.ldap -s /usr/bin/zsh myusernameдает мне Segmentation fault.
jchook
Тогда об этом следует сообщить здесь: launchpad.net/ubuntu/+source/nss-pam-ldapd/+bugs
pim
1

Подождите, это пользователь LDAP, в LDAP есть настройка, которая позволяет вам изменять оболочку по умолчанию для пользователя в них.

Вы можете установить ldap-account-manager, который предоставляет веб-интерфейс для конфигурации ldap.

apt install ldap-account-manager

введите описание изображения здесь

Это можно сделать на любом сервере, на котором вы хотите выполнить настройку. Так как вам все равно нужно будет настроить сервер в конфигурационных файлах. Но я бы порекомендовал вам установить его на сервере, на котором фактически работает ldap, просто чтобы вы могли легче его запомнить.

Ziazis
источник
-1

Чтобы процитировать Аджмитч здесь ,

Вы можете установить fish в качестве оболочки по умолчанию, выполнив команду chsh -s, which fish затем выйдите из системы и снова войдите в нее. (Чтобы вернуть ее в bash, вам, конечно, нужно использовать синтаксис Fish, например, chsh -s (который bash))

Просто используйте chsh -s which fishИ убедитесь, что вы вышли из системы и снова вошли в систему или перезагрузили компьютер.

Кстати, это может быть возможным дубликатом здесь: Как установить fish в качестве оболочки по умолчанию?

Максимум
источник
Хмм..чш работает только если пользователь в / etc / passwd. $ chsh -s `which fish` Password: chsh: user 'jaan' does not exist in /etc/passwd
Абхишек Бхатия
Ах ... да ... я не видел эту часть ...
Макс
1
Это не работает, когда учетными записями управляет LDAP. -1
Дэвид Фёрстер