几周前,无法再使用 ssh 登录远程 Mac。升级 Webmin 到版本 1.550 和/或使用 webmin 更改设置时,问题开始出现。
使用:* Mac OS X 10.6.5 + Webmin 1.550 + Virtualmin 3.66GPL
预期结果:使用 ssh 登录没有问题。
实际结果:ssh:连接到主机 host.domain.tld 端口 22:操作超时
回归:经过进一步调查,结果表明:
- 当 sshd 配置为不分离(-D)时,可以使用以下方法正确启动
$ sudo /usr/sbin/sshd -D -d -d -d -e
debug2:load_server_config:文件名/etc/sshd_config debug2:load_server_config:完成配置 len = 493 debug2:parse_server_config:配置/etc/sshd_config 长度 493 debug3:/etc/sshd_config:14 设置协议 2 debug3:/etc/sshd_config:30 设置 SyslogFacility AUTHPRIV debug3:/etc/sshd_config:32 设置 LogLevel DEBUG3 debug3:/etc/sshd_config:39 设置 MaxAuthTries 3 debug3:/etc/sshd_config:108 设置 UseDNS 没有 debug3:/etc/sshd_config:111 设置 MaxStartups 5 debug3:/etc/sshd_config:119 设置子系统 sftp /usr/libexec/sftp-server debug3:/etc/sshd_config:121 设置 IgnoreRhosts 是 debug3:/etc/sshd_config:122 设置 IgnoreUserKnownHosts 没有 debug3:/etc/sshd_config:123 设置 PrintMotd 是 debug3:/etc/sshd_config:124 设置 StrictModes 是 debug3:/etc/sshd_config:125 设置 RSAAuthentication 是 debug3:/etc/sshd_config:126 设置 PermitEmptyPasswords 否 debug3:/etc/sshd_config:127 设置 PasswordAuthentication 是 debug3:/etc/sshd_config:128 设置 DenyGroups deniedssh debug3:/etc/sshd_config:129 设置 PubkeyAuthentication 是 debug3:/etc/sshd_config:130 设置 GatewayPorts 否 debug3:/etc/sshd_config:131 设置 AllowTcpForwarding 是 debug3:/etc/sshd_config:132 设置 KeepAlive 是 debug1:sshd 版本 OpenSSH_5.2p1 debug3:不是 RSA1 密钥文件 /etc/ssh_host_rsa_key。 debug1:读取PEM私钥完成:输入RSA debug1:私人主机密钥:#0 类型 1 RSA debug3:不是 RSA1 密钥文件 /etc/ssh_host_dsa_key。 debug1: 读取 PEM 私钥完成: 输入 DSA debug1:私人主机密钥:#1 type 2 DSA 调试1:rexec_argv[0]='/usr/sbin/sshd' 调试1:rexec_argv[1]='-D' 调试1:rexec_argv[2]='-d' 调试1:rexec_argv[3]='-d' 调试1:rexec_argv[4]='-d' 调试1:rexec_argv[5]='-e' debug2:fd 3 设置 O_NONBLOCK debug1:绑定到::上的端口 22。 服务器正在监听::端口 22。 debug2:fd 4 设置 O_NONBLOCK debug1:绑定到0.0.0.0上的端口22。 服务器监听 0.0.0.0 端口 22。 debug1:fd 5 清除 O_NONBLOCK debug1:在调试模式下运行时服务器不会分叉。 debug3:send_rexec_state:输入 fd = 8 配置长度 493 调试3:ssh_msg_send:类型0 debug3:send_rexec_state:完成 debug1:rexec 启动 5 输出 5 newsock 5 pipe -1 sock 8 debug3:recv_rexec_state:进入fd = 5 debug3:ssh_msg_recv 正在进入 debug3:recv_rexec_state:完成 debug2:parse_server_config:配置rexec len 493 debug3:rexec:14 设置协议 2 debug3:rexec:30 设置 SyslogFacility AUTHPRIV debug3:rexec:32 设置 LogLevel DEBUG3 debug3:rexec:39 设置 MaxAuthTries 3 debug3:rexec:108 设置 UseDNS 否 debug3:rexec:111 设置 MaxStartups 5 debug3:rexec:119 设置子系统 sftp /usr/libexec/sftp-server debug3:rexec:121 设置 IgnoreRhosts 是 debug3:rexec:122 设置 IgnoreUserKnownHosts 没有 debug3:rexec:123 设置 PrintMotd 是 debug3:rexec:124 设置 StrictModes 是 debug3:rexec:125 设置 RSAAuthentication 是 debug3:rexec:126 设置 PermitEmptyPasswords 否 debug3:rexec:127 设置 PasswordAuthentication 是 debug3:rexec:128 设置 DenyGroups deniedssh debug3:rexec:129 设置 PubkeyAuthentication 是 debug3:rexec:130 设置 GatewayPorts 否 debug3:rexec:131 设置 AllowTcpForwarding 是 debug3:rexec:132 设置 KeepAlive 是 debug1:sshd 版本 OpenSSH_5.2p1 debug3:不是 RSA1 密钥文件 /etc/ssh_host_rsa_key。 debug1:读取PEM私钥完成:输入RSA debug1:私人主机密钥:#0 类型 1 RSA debug3:不是 RSA1 密钥文件 /etc/ssh_host_dsa_key。 debug1: 读取 PEM 私钥完成: 输入 DSA debug1:私人主机密钥:#1 type 2 DSA debug1:复制后的 inetd 套接字:3,3 debug3:BSM 审计:来自 1.1.1.247 端口 53137 的连接 debug3:BSM 审计:iptype 4 机器 ID 010101d9 00000000 00000000 00000000 来自 1.1.1.247 端口 53137 的连接
连接成功后...
- sshd 不再以 inetd 模式 (-i) 启动并接受入站连接,而是使用
$ sudo /usr/sbin/sshd -i -d -d -d -e
debug2:load_server_config:文件名/etc/sshd_config debug2:load_server_config:完成配置 len = 493 debug2:parse_server_config:配置/etc/sshd_config 长度 493 debug3:/etc/sshd_config:14 设置协议 2 debug3:/etc/sshd_config:30 设置 SyslogFacility AUTHPRIV debug3:/etc/sshd_config:32 设置 LogLevel DEBUG3 debug3:/etc/sshd_config:39 设置 MaxAuthTries 3 debug3:/etc/sshd_config:108 设置 UseDNS 没有 debug3:/etc/sshd_config:111 设置 MaxStartups 5 debug3:/etc/sshd_config:119 设置子系统 sftp /usr/libexec/sftp-server debug3:/etc/sshd_config:121 设置 IgnoreRhosts 是 debug3:/etc/sshd_config:122 设置 IgnoreUserKnownHosts 没有 debug3:/etc/sshd_config:123 设置 PrintMotd 是 debug3:/etc/sshd_config:124 设置 StrictModes 是 debug3:/etc/sshd_config:125 设置 RSAAuthentication 是 debug3:/etc/sshd_config:126 设置 PermitEmptyPasswords 否 debug3:/etc/sshd_config:127 设置 PasswordAuthentication 是 debug3:/etc/sshd_config:128 设置 DenyGroups deniedssh debug3:/etc/sshd_config:129 设置 PubkeyAuthentication 是 debug3:/etc/sshd_config:130 设置 GatewayPorts 否 debug3:/etc/sshd_config:131 设置 AllowTcpForwarding 是 debug3:/etc/sshd_config:132 设置 KeepAlive 是 debug1:sshd 版本 OpenSSH_5.2p1 debug3:不是 RSA1 密钥文件 /etc/ssh_host_rsa_key。 debug1:读取PEM私钥完成:输入RSA debug1:私人主机密钥:#0 类型 1 RSA debug3:不是 RSA1 密钥文件 /etc/ssh_host_dsa_key。 debug1: 读取 PEM 私钥完成: 输入 DSA debug1:私人主机密钥:#1 type 2 DSA debug1:复制后的 inetd 套接字:3、4 debug3:BSM 审计:来自未知端口 65535 的连接 BSM 审计:getaddrinfo 因未知而失败:未提供节点名或服务名,或者未知 debug3:BSM 审计:iptype 0 机器 ID 00000000 00000000 00000000 00000000 来自未知端口 65535 的连接 SSH-2.0-OpenSSH_5.2
无法建立连接。
有什么建议可以从哪个方向寻找解决方案?
答案1
initd
在 Mac 上使用它来启动任何程序是非常不标准的。相反,launchd
它以临时方式启动sshd
(即,它不会像典型的服务器守护程序一样运行,直到有人敲门)。我怀疑您使用以 Linux 为中心的 Webmin 来管理 ssh 是导致此问题的原因,因为 Webmin 对 了解不多launchd
。
首先,确保 ssh launchd 项已配置为加载,这只是为了消除明显的问题。
sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
这类似于在设置选项中勾选 Server Admin.app 上的复选框以启用 SSH。检查系统日志以查看是否launchctl
有投诉。
目前尚不清楚您为什么要让 Webmin 处理 SSH,但 Apple 的默认配置可能会有所启发。
其中有一个/System/Library/LaunchDaemons
名为 sshd.plist 的 launchd 项目。此 XML 文件表明它被用作实际使用 -i 标志/usr/libexec/sshd-keygen-wrapper
启动的“程序” 。(/usr/sbin/sshd
sshd-keygen-wrapper程序是一个 shell 脚本,用于首先在空的用户主目录中设置初始 rsa 和 dsa 密钥。)但是,sshd-keygen-wrapper 也会启动 sshd,exec /usr/sbin/sshd $@
并且就套接字防火墙而言,它是一个受信任/白名单程序。
您可能还想/etc/sshd_config
从备份或另一台机器中获取默认值,以消除故障排除中的变量。