在Hosted Chef Server引导节点时遇端口22连接拒绝错误求助
解决Hosted Chef Server节点引导时的SSH连接拒绝错误
你遇到的这个错误核心是本地机器无法通过SSH 22端口连接到目标节点xxx.xxx.xxx.xxx,这是knife引导节点时最常见的问题之一,本质和knife本身配置关系不大,主要是SSH连通性层面的问题。下面是一步步的排查和解决步骤:
- 先做最基础的手动SSH测试:先抛开knife工具,直接在本地终端执行
ssh shivam@xxx.xxx.xxx.xxx,输入密码尝试登录。如果这一步都失败,那问题肯定出在SSH服务或网络上,优先解决这个再回头用knife。 - 检查目标节点的SSH服务状态:在目标节点本地执行命令,确认SSH服务是否正常运行:
如果服务未启动,先启动并设置开机自启:# 针对systemd架构的系统(CentOS 7+/Ubuntu 16.04+) sudo systemctl status sshd # 针对旧版sysvinit架构的系统 sudo service ssh statussudo systemctl start sshd sudo systemctl enable sshd - 检查目标节点的防火墙规则:默认防火墙大概率会拦截22端口,根据系统类型执行对应命令开放端口:
- Ubuntu/Debian(使用ufw防火墙):
sudo ufw allow 22/tcp sudo ufw reload - CentOS/RHEL(使用firewalld防火墙):
sudo firewall-cmd --add-port=22/tcp --permanent sudo firewall-cmd --reload
- Ubuntu/Debian(使用ufw防火墙):
- 确认目标节点的SSH端口是否为默认22:有些环境会修改SSH默认端口,你可以在目标节点查看
/etc/ssh/sshd_config文件中的Port配置项。如果端口不是22,需要在knife bootstrap命令中添加--ssh-port <自定义端口>参数,比如:knife bootstrap xxx.xxx.xxx.xxx --ssh-user shivam --ssh-password '******' --sudo --use-sudo-password --node-name chefNode1 --run-list 'recipe[learn_chef_httpd1]' --ssh-port 2222 - 验证
shivam用户的权限:确保该用户在目标节点上存在,并且拥有SSH登录权限和sudo权限。登录目标节点后执行sudo whoami,如果能返回root说明sudo权限正常;如果提示需要密码,你命令里的--use-sudo-password参数已经正确适配了这个场景。 - 排查网络连通性:在本地执行
ping xxx.xxx.xxx.xxx,如果ping不通,说明你的本地机器和目标节点之间存在网络隔离(比如不在同一网段、路由限制、云服务器安全组未开放22端口),需要先解决网络可达性问题。
完成以上步骤后,重新执行你的knife bootstrap命令,应该就能正常完成节点引导了。
内容的提问来源于stack exchange,提问作者gshivam63




