ssh: connect to host 域名 port 22: Connection refused
文章目录
- 确认目标主机的IP或域名是否正确
- 检查虚拟机SSH服务是否运行
- 在虚拟机内执行以下命令
- 检查防火墙是否放行SSH端口
- 在虚拟机内操作
- 检查SSH服务配置
- 在虚拟机内编辑SSH配置文件
- 测试网络连通性和端口可达性
- 在本地计算机操作
- 其他可能原因
- 最终连接命令
- 流程图解
确认目标主机的IP或域名是否正确
检查你的SSH配置(~/.ssh/config
):
Host my-vm
HostName 域名 # 检查此处是否正确
User 用户名
IdentityFile ~/.ssh/id_rsa
Port 22
- 问题可能:
域名
无法解析到正确的IP(如IP地址
)。 - 解决方案:
- 直接使用IP替换主机名:
Host my-vm HostName IP地址 # 替换为实际IP User 用户名 IdentityFile ~/.ssh/id_rsa
- 或在本地
hosts
文件添加解析:- Windows:编辑
C:WindowsSystem32driversetchosts
,添加:IP地址 域名
- Linux/Mac:编辑
/etc/hosts
,添加相同内容。
- Windows:编辑
- 直接使用IP替换主机名:
检查虚拟机SSH服务是否运行
在虚拟机内执行以下命令
- 确认SSH服务状态:
sudo systemctl status sshd # 适用于大多数Linux系统(Ubuntu/Debian/CentOS)
- 如果显示
active (running)
,则服务正常。 - 如果未安装,点击该链接
- 如果显示
检查防火墙是否放行SSH端口
在虚拟机内操作
- 查看防火墙规则:
sudo ufw status # Ubuntu/Debian sudo firewall-cmd --list-all # CentOS/RHEL
- 放行22端口:
sudo ufw allow 22 # Ubuntu/Debian sudo firewall-cmd --permanent --add-port=22/tcp # CentOS/RHEL sudo firewall-cmd --reload
检查SSH服务配置
在虚拟机内编辑SSH配置文件
sudo nano /etc/ssh/sshd_config
- 确保以下配置未被注释:
Port 22 ListenAddress 0.0.0.0 PermitRootLogin prohibit-password # 如果允许root登录,改为yes PasswordAuthentication yes # 如果使用密码登录,临时开启 PubkeyAuthentication yes # 启用密钥认证
- 重启SSH服务:
sudo systemctl restart sshd
测试网络连通性和端口可达性
在本地计算机操作
-
Ping测试:
ping ip地址
- 若不通:检查虚拟机和本地是否在同一局域网,或虚拟机网络模式(如NAT/桥接)。
-
Telnet测试22端口:
telnet IP地址
- 若显示连接失败,可能是防火墙或网络问题。
- 若成功,会显示SSH协议信息(如
SSH-2.0-OpenSSH_8.2p1
)。
其他可能原因
虚拟机使用非22端口:
- 在SSH配置中指定端口:
Port 2222
。 - 本地网络限制:
- 关闭本地防火墙(如Windows Defender防火墙)临时测试。
- VMware网络配置问题:
- 确保虚拟机网络适配器为 桥接模式 或 NAT模式。
- 在VMware中检查虚拟网络编辑器,确认NAT设置中的端口转发(如需外网访问)。
最终连接命令
ssh -v 用户名@IP地址 # 添加 `-v` 参数查看详细日志
- 根据错误日志调整配置(重点关注日志中的
Permission denied
或连接超时提示)。
流程图解
按上述步骤逐一排查,通常可解决问题。如果仍有问题,请提供 ssh -v
的完整输出日志。