伪·ssh能登录服务器,但是sftp不能登录
问题现象
生产环境共计19台服务器,处于内网隔离环境中,通过堡垒机登录使用。所有的服务器都能通过堡垒机使用ssh连接使用,但是只有其中一台能够sftp,其它的服务器都不能通过堡垒机使用sftp;
问题原因
堡垒机的IP地址没有加入到Linux的ip白名单中。
原因发现记录
按照网络上搜索出来的结果:
1、我对比了所有服务器的sshd_config配置文件内容,发现内容都是一致的
2、检查sftp子系统的可执行文件的权限:发现也都是755权限,不存在0权限的问题
然后我给sftp加上日志记录:
/etc/ssh/sshd_config文件:
[aduser@emqx-001 ~]$ sudo cat /etc/ssh/sshd_config |grep -v "^#"|grep -v "^$" Port 10022 HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_ecdsa_key HostKey /etc/ssh/ssh_host_ed25519_key SyslogFacility AUTHPRIV LogLevel DEBUG3 PermitRootLogin no AuthorizedKeysFile .ssh/authorized_keys PasswordAuthentication yes ChallengeResponseAuthentication no GSSAPIAuthentication no GSSAPICleanupCredentials no UsePAM yes X11Forwarding yes UseDNS no AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE AcceptEnv XMODIFIERS Subsystem sftp /usr/libexec/openssh/sftp-server -l DEBUG3 -f local5 [aduser@emqx-001 ~]$ |
在/etc/rsyslog.conf文件最后加入一行:auth,authpriv.*,local5.*,/var/log/sftp.log
重启sshd和rsyslog服务:
sudo systemctl restart rsyslog sshd
然后尝试sftp登录,抓取日志如下:
fd 5 is not O_NONBLOCK
Forked child 47874.
send_rexec_state: entering fd = 8 config len 769
ssh_msg_send: type 0
send_rexec_state: done
oom_adjust_restore
Set /proc/self/oom_score_adj to 0
rexec start in 5 out 5 newsock 5 pipe 7 sock 8
inetd sockets after dupping: 3, 3
Connection refused by tcp wrapper
connect from 22.62.20.6 (22.62.20.6)
然后确定了是因为/etc/hosts.deny和/etc/hosts.allow文件内容的原因,打开这两个文件,发现/etc/hosts.deny里面是拒绝所有的连接;而/etc/hosts.allow里面写了几行内容,看了下ip地址,没有22.62.20.6这个ip。将其加上并保存,重新尝试sftp,本次顺利登录上了。