获取OpenShift Pod的SSH连接:CRC集群下VS远程调试C++应用失败
解决CRC(OpenShift)Pod中SSH本地连接重置问题
排查与解决步骤
1. 先确认sshd是否真的在运行
执行命令查看进程:
ps aux | grep sshd
如果没找到sshd进程,直接前台启动并输出调试日志,能立刻看到失败原因:
/usr/sbin/sshd -D -e
2. 修正sshd配置
编辑/etc/ssh/sshd_config,确保关键配置正确:
PermitRootLogin yes PasswordAuthentication no PubkeyAuthentication yes ListenAddress 0.0.0.0 ListenAddress :: # 同时绑定IPv4和IPv6,避免日志里的IPv6连接问题
修改后重启sshd:
/usr/sbin/sshd
3. 处理SELinux限制
OpenShift默认强制启用SELinux,这是和minikube的核心差异之一,可能拦截sshd的网络操作。临时切换到宽容模式测试:
setenforce 0
如果此时能正常连接,说明是SELinux的问题,添加规则允许sshd运行:
chcon -t sshd_exec_t /usr/sbin/sshd restorecon -Rv /var/run/sshd
4. 调整Pod的Security Context
OpenShift对Pod权限限制更严格,确保你的Deployment/Pod YAML里有必要的权限配置:
securityContext: capabilities: add: - NET_BIND_SERVICE allowPrivilegeEscalation: true
同时确保Dockerfile里设置了USER root——sshd默认需要root权限绑定22端口,OpenShift默认用非root用户运行Pod,会直接导致sshd启动失败。
5. 强制用IPv4测试连接
日志里显示连接的是IPv6的[::1],如果sshd没绑定IPv6,会直接重置连接。试试强制用IPv4连接:
ssh -vvv -i /root/.ssh/id_rsa root@127.0.0.1
如果成功,说明是IPv6绑定的问题,回到步骤2补全ListenAddress ::配置即可。
内容的提问来源于stack exchange,提问作者Ahmed_Faraz
相关产品推荐
相关产品推荐

