知识改变命运,技术就是要分享,有问题随时联系,免费答疑,欢迎联系!
故障现象
使用 sftp 协议连接主机时, 明显感觉缓慢且卡顿,并且时常出现如下报错:
点击重新连接后,又有概率重新连接上; 总之在"连接上"和"连接超时"这2种情况中反复横跳(有时可以连续连接上,有时卡一会连上,有时直接超时)
故障排查过程
1.检查系统中是否存在错误日志, 使用命令 journalctl -p err
由于是客户业务系统,以下输出省略了大量的敏感内容信息
[root@itmp ~]# journalctl -p err ...... 省略敏感信息 ...... 4月 22 11:04:37 itmp sshd[9696]: pam_systemd(sshd:session): Failed to release session: Interrupted system call 4月 22 11:11:29 itmp sshd[10226]: pam_systemd(sshd:session): Failed to release session: Interrupted system call |
可以看到确实有 sshd 进程的相关报错,将该报错内容直接复制
在搜索引擎中搜索 "redhat kbase pam_systemd(sshd:session):Failed to release..."
找到一篇红帽知识库中的相关文档,链接:Logs similar to "pam_systemd(sshd:session): Failed to release session: Interrupted system call" seen - Red Hat Customer Portal
由于需要订阅账号权限才可查看内容,我将其内容截图如下:
文章中表示,该报错内容属于"信息性"不必引起恐慌; 至此可以判断不是这个报错信息引发的问题。
2.尝试使用其他报错信息进行搜索,即上图中 winSCP 客户端的报错信息 "无法初始化SFTP协议。主机是SFTP服务器吗?"
事实再次证明,中文搜索报错信息是极大的错误,我在此大概浪费了将近1个小时,毫无进展,所有中文搜索到的解决方案均无法解决问题;
- 尝试升级了 openssh-server
- 尝试升级了 systemd
- 尝试修改了 winSCP 客户端的连接配置
- 尝试修改了 /usr/libexec/openssh/sftp-server 和 /usr/libexec/sftp-server 各种配置的组合
3.将上文报错信息翻译成英文继续搜索 "Cannot initialize SFTP protocol. Is the host running a SFTP server"
搜索引擎快速的把我带到了 Cannot initialize SFTP protocol. Is the host running a SFTP :: Support Forum :: WinSCP WinSCP 客户端的官方论坛。
该帖下面给出了解决方案:
在 /etc/ssh/sshd_config 配置文件中,修改相关条目为:
[root@localhost ~]# vim /etc/ssh/sshd_config ForceCommand internal-sftp |
通过阅读 man sshd_config 手册得知, ForceCommand 字段将会指定用户登录后所执行的命令(即: 该用户仅能通过 SFTP 登录系统,而无法执行 Bash,这不是我们想要的,但思路已经清晰了)
将 internal-sftp 作为关键字,继续在 sshd_config 的 man 手册中进行搜索,可以看到
以上我们得知,该参数用于配置ssh外部子系统,比如 文件传输守护进程,其实就是 sftp; 将其参数指定为 internal-sftp 即使用进程内的 sftp 服务器
修改 /etc/ssh/sshd_config 配置文件
[root@itmp ~]# vim /etc/ssh/sshd_config #Subsystem sftp /usr/libexec/openssh/sftp-server # 原先的配置,将其注释 Subsystem sftp internal-sftp # 新配置,自己手动写上 [root@itmp ~]# systemctl restart sshd |
验证效果
WinSCP 连接不再超时,连接速度恢复到正常。