尝试更改默认外壳程序时,用户不在/ etc / passwd中


22

我想将我的默认shell从tcsh更改为bash。所以我尝试了,这就是发生的事情:

>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

确实,我不在/ etc / passwd中。我不知道为什么

我能做什么?


11
您的系统是否使用分布式身份验证(例如kerberos / winbind)?在这种情况下,您的用户详细信息将不会显示在本地/ etc / passwd文件中(但应该使用可见getent passwd <userid>)。我认为chsh在这种情况下是否支持运行可能取决于/etc/pam.d/
steeldriver

Answers:


15

我的计算机是使用分布式身份验证的网络的一部分,因此我的用户详细信息不会显示在本地/ etc / passwd文件中(但使用getent passwd userid可以看到)。(感谢@steeldriver)对于我来说,我必须在核心计算机上执行chsh。


11
您能解释一下什么是“核心机器”吗?
Nerrve 2014年

在我的情况下,我指的是大学在其网络内部提供的一组专用计算机,学生可以登录并使用(共享)。而不是我办公室里的机器。
rmp251

4
@ rmp251这正是我的情况。我没有访问核心计算机的权限。您是否找到其他方法来更改外壳?
极客

@Geek您找到解决方法了吗?
milushov

13

有一个解决方法gnome-terminal

  1. 转到编辑 -> 配置文件首选项 -> 标题和命令
  2. 选中运行自定义命令而不是我的shell
  3. 提供bash为“ 自定义”命令(或fish,或其他任何内容)

谢谢!通过适用于我的设置,提供在我打开终端(或新终端标签)时立即运行的命令。
cacoder

这也适用于KDE中的Konsole和yakuake。
xgdgsc

6

如果您正在通过PAM或其他方式使用LDAP身份验证,则必须在LDAP服务器中找到答案。让我们将其针对Microsoft AD,在这种情况下,/etc/passwd登录时您的域帐户未登录,但是您可以通过看到您在AD中的用户属性getent passwd | grep user

如果最后显示您的shell是/bin/csh,那是因为在您的广告中有一个属性。因此,如果您在AD上拥有管理员帐户,则可以自己进行修复。否则,只需告诉您的AD管理员在Active Directory用户和计算机的“ 视图”选项卡中启用高级功能>用户属性> UNIX属性即可。在那里,您可以将登录shell更改为/bin/bash

确保您不要忘记运行:

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

来源:尝试更改默认shell时,/ etc / passwd中不存在用户


1
问题是要更改一个用户的外壳,而pbis配置要更改所有用户。
kubanczyk

5

如果要为用户更改外壳程序,则无需成为root用户。只需输入:

chsh

没有sudo和没有参数。


另请参阅man chsh

chsh命令更改用户登录外壳。这决定了名字
用户的初始登录命令。普通用户只能更改
用自己的帐户登录shell ; 超级用户可以更改登录名
任何帐户的外壳。

我使用sudo的原因是因为没有它,它什么也没做。 > whoami userid > chsh You may not change the shell for 'userid'.
rmp251 2014年

它起作用的原因是chsh不适用于kerberos
Lennart Rolland

2

如果忘记了用户名,则可以使用whoamicommand来记住您。

因此,尝试:

sudo chsh $(whoami)

如果确实存在,则在/etc/passwd文件中不存在以您的用户名开头的行(这似乎是无法解释的),您可以添加一个新的行,如下所示:

用户名:x:1000:1000:您的真实姓名 ,,,:/ home / 用户名:/ bin / bash

另请参阅:了解/ etc / passwd文件格式


1
您的用户可能不在/ etc / passwd中的一个原因是,如果未在该计算机上处​​理身份验证(例如ldap)
MatrixManAtYrService

1

如果您尝试与域用户一起使用SSH进入远程主机,则可能无法使用chsh提到的@Masoud 来更改Shell 。但这是这种情况的简单解决方法-每当您将ssh插入计算机时,请执行以下操作:

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

要么

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

如果您还想直接登录到其他工作目录。

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.