如何防止使用 sftp 时出现“上次登录:”消息?

如何防止使用 sftp 时出现“上次登录:”消息?

在 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”,然后断开连接,这是预期的行为。)sshsftpnologinssh

sftp消息失败Received message too long 1416128883。我知道此失败是由“MOTD”(每日消息)引起的,正如sftp所期望的“干净登录”。我尝试使用以下命令禁用服务器上的所有“MOTD”部分(这些结果):

  • PrintLastLog no将和添加PrintMotd no到末尾/etc/ssh/ssh_configssh使用重新启动restart ssh。 (没有效果。测试ssh显示“MOTD”和“上次登录:”。)

  • session optional pam_motd.so中注释掉/etc/pam.d/sshd。 (预防 MOTD。但是“LastLog”没有相应的条目,因此,使用 进行测试ssh,“Last Login:”仍然显示,因此sftp仍然失败.)

  • 注释掉session optional pam_lastlog.sosession 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_configssh

答案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 最后一个

相关内容