我可以通过 ssh 访问云虚拟机上全新安装的 Ubuntu 22.04。我的密码输入是
fish:x:1001:100::/home/fish:/bin/bash
和 /etc/group 包含
users:x:100:
sudo:x:27:gsluser,fish
当我登录时,我得到sh
而不是bash
并且我不会自动加入该sudo
组,尽管groups
说我应该加入。如果我newgrp
进入sudo
,我会同时得到:
$ groups
users
$ groups fish
fish @ users sudo
newgrp sudo
$ groups
sudo users
$
我在各种配置文件和 bashrc 文件中都看不到任何奇怪的地方,并且 sshd.conf 自安装以来没有变化。谁能解释这种行为?
答案1
从问题的评论中可以看出,您正在使用 SSH 连接共享通过预先存在的共享 SSH 连接连接到远程系统。
当您使用 SSH 连接共享时(请参阅文档了解-M
和-S
命令行选项在手册ssh(1)
,以及解释ControlMaster
和ControlPath
以及相关配置选项手册ssh_config(5)
)远程 shell 是从单个远程会话生成的。当创建此单个远程会话时,就会建立辅助组和其他属性,并且这些属性将保留在适当位置,并针对通过同一共享 SSH 连接建立的每个进一步连接进行复制。
这就是为什么当您注销并再次登录时,新的辅助组(和登录 shell)不会生效。
解决方案是不使用共享 SSH 连接进行连接,
ssh -S none remotehost
...或者通过强制终止连接
ssh -O exit remotehost
...然后建立到远程主机的新连接。