当用户不在/ etc / passwd中时更改默认Shell


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

相关问题:尝试更改默认Shell时,/ 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

那有可能吗?
乔治·乌德森

@乔治,请检查编辑。
Abhishek Bhatia


@乔治这行不通。
Abhishek Bhatia

shell路径应该是在/etc/shellschsh样的工具来接受它。
muru

Answers:



1

等等,这是一个LDAP用户,LDAP中有一个设置,可让您更改其中用户的默认外壳。

您可以安装ldap-account-manager,它为ldap配置提供了一个webfrontent。

apt install ldap-account-manager

在此处输入图片说明

可以在要处理配置的任何服务器上完成此操作。因为无论如何您都需要在配置文件中配置服务器。但是我建议您将其安装在实际运行ldap的服务器上,以便您可以更轻松地记住它。


-1

这里引用ajmitch ,

您可以通过运行chsh -s将fish设置为默认外壳,which fish 然后注销并重新登录。(要将其重新设置为bash,您当然需要使用Fish语法,例如chsh -s(其中bash))

只需使用chsh -s which fish并确保注销并重新登录或重新启动计算机即可。

顺便说一下,这可能是这里的重复项:如何将fish设置为默认外壳?


仅当/ etc / passwd中的用户时,Hmm..chsh才起作用。$ chsh -s `which fish` Password: chsh: user 'jaan' does not exist in /etc/passwd
Abhishek Bhatia

啊...是的...我没看到那部分...
Max

1
当帐户由LDAP管理时,这不起作用。-1
David Foerster
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.