Mac 上的 sshd 不再接受 inetd (-i) 模式下的连接,但在非分离模式 (-D) 下接受连接,如何修复?

Mac 上的 sshd 不再接受 inetd (-i) 模式下的连接,但在非分离模式 (-D) 下接受连接,如何修复?

几周前,无法再使用 ssh 登录远程 Mac。升级 Webmin 到版本 1.550 和/或使用 webmin 更改设置时,问题开始出现。

使用:* Mac OS X 10.6.5 + Webmin 1.550 + Virtualmin 3.66GPL

预期结果:使用 ssh 登录没有问题。

实际结果:ssh:连接到主机 host.domain.tld 端口 22:操作超时

回归:经过进一步调查,结果表明:

  1. 当 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 的连接

连接成功后...

  1. 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/sshdsshd-keygen-wrapper程序是一个 shell 脚本,用于首先在空的用户主目录中设置初始 rsa 和 dsa 密钥。)但是,sshd-keygen-wrapper 也会启动 sshd,exec /usr/sbin/sshd $@并且就套接字防火墙而言,它是一个受信任/白名单程序。

您可能还想/etc/sshd_config从备份或另一台机器中获取默认值,以消除故障排除中的变量。

相关内容