直接运行sshd进程时首次连接结束后服务停止的解决方法咨询
直接运行sshd进程时首次连接结束后服务停止的解决方法咨询
嗨,我来帮你理清楚这个问题:
你遇到的情况其实是sshd调试模式的默认行为导致的——当你加上-ddd参数启动时,sshd会进入前台单实例调试模式,它只会处理一个连接,当这个连接断开后,进程就会直接终止,这是为了方便开发者聚焦单连接的详细调试日志而设计的。
如果想让手动启动的sshd能持续运行、接受多个连接,有两种方案可选:
方案一:关闭调试模式(推荐,适合不需要调试的场景)
直接去掉-ddd参数,运行命令:sudo /usr/sbin/sshd -p2222这时
sshd会以守护进程模式启动,父进程会一直后台监听端口,每收到一个连接就fork一个子进程去处理,子进程会在连接断开后自动退出,父进程则继续等待新的连接。方案二:保留调试模式同时支持多连接
如果你需要保留详细调试日志,又想让sshd持续运行,可以加上-D参数让它保持前台(方便查看实时日志),同时指定让它fork子进程处理连接的配置:sudo /usr/sbin/sshd -ddd -p2222 -D -o ForkAfterAuthentication=yes这个命令会让
sshd在前台运行并输出详细调试日志,同时每处理一个连接就fork子进程,父进程继续监听新连接,这样即使第一个连接断开,父进程也不会终止。如果想让它后台运行,可以把日志重定向到文件并加上&:sudo /usr/sbin/sshd -ddd -p2222 -D -o ForkAfterAuthentication=yes 2>&1 > sshd_debug.log &
另外补充一句,虽然手动启动能满足需求,但用sudo systemctl start sshd(或者你的系统对应的service sshd start)确实是更规范的方式,系统服务管理器会帮你自动处理守护进程的生命周期、日志轮转、异常重启等问题。
备注:内容来源于stack exchange,提问作者neubert




