在 Ubuntu GNU/Linux 12.04 中,我有一个johndoe
属于某个组的用户,该用户使用以下命令sftponly
设置为sftp
监狱chroot
Subsystem sftp internal-sftp
Match Group sftponly
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
在......的最后/etc/ssh/ssh_config
。用户home
目录的所有组成部分都是root
拥有的目录,任何其他用户或组都无法写入这些目录,如man sshd_config
(在ChrootDirectory
)中所述。在他的chroot
监狱里,有一个可写目录files
:
sudo groupadd sftponly
sudo mkdir -p /home/sftponly/johndoe/files
sudo useradd -d /home/sftponly/johndoe -g sftponly -s /usr/sbin/nologin johndoe
sudo chmod go-w /home/sftponly/{,johndoe}
sudo chown johndoe:sftponly /home/sftponly/johndoe/files
sudo chmod ug+rwX /home/sftponly/johndoe/files
(将 shell 设置为与或/bin/false
均不起作用。当 shell连接时,显示“MOTD”,然后断开连接,这是预期的行为。)ssh
sftp
nologin
ssh
但sftp
消息失败Received message too long 1416128883
。我知道此失败是由“MOTD”(每日消息)引起的,正如sftp
所期望的“干净登录”。我尝试使用以下命令禁用服务器上的所有“MOTD”部分(这些结果):
PrintLastLog no
将和添加PrintMotd no
到末尾/etc/ssh/ssh_config
并ssh
使用重新启动restart ssh
。 (没有效果。测试ssh
显示“MOTD”和“上次登录:”。)session optional pam_motd.so
中注释掉/etc/pam.d/sshd
。 (预防 MOTD。但是“LastLog”没有相应的条目,因此,使用 进行测试ssh
,“Last Login:”仍然显示,因此sftp
仍然失败.)注释掉
session optional pam_lastlog.so
和session optional pam_motd.so
注释掉/etc/pam.d/login
。 (没有效果。测试ssh
显示 MOTD 和“上次登录:”。).hushlogin
使用 .在客户端上创建文件touch ~/.hushlogin
。 (没有效果.)
我没主意了。这个“上次登录:”消息还可能来自哪里以及如何禁用它(理想情况下仅用于登录sftp
而不用于ssh
登录,但是,我想作为sftp
用途ssh
,该消息将要么同时存在,要么不存在)?
答案1
我的打字错误是导致我遇到上述不合理行为的原因。必须编辑的是/etc/ssh/sshd_config
(对应于守护进程),而不是(对应于客户端)。我把这个问题留在这里,以防它对其他人有帮助。ssh
/etc/ssh/ssh_config
ssh
答案2
在我的系统上,它来自 Pam。
/etc/pam.d/postlogin
准确地说。
我通过注释掉现有行并添加以下内容来删除该消息:
session optional pam_lastlog.so silent
答案3
为了在我使用的脚本中过滤 /etc/motd (此示例适用于程序 git)
git pull 2>&1 | grep -vF -f ~/bin/remote.motd | egrep -v "^$|^ $"
文件 ~/bin/remote.motd 是远程系统给出的 motd 的复制粘贴。
答案4
我删除了 /var/log/lastlog 并且“上次登录”消息永远消失了。适用于我测试过的所有发行版:Ubuntu 和 SUSE。
我是怎么想到这个想法的?
哪个登录 字符串 /bin/login | grep 最后一个