SSH 报错详解及解决方法
一、SSH 连接常见报错及其解决方法
1. Connection refused(连接被拒绝)

报错信息:
- ssh: connect to host 123.123.123.111 port 22: Connection refused
可能原因:
SSH 服务未启动
防火墙未开放端口 22
网络问题,如网线未连接或网卡故障
解决方法:

(1)启动 SSH 服务:
- sudo systemctl start sshd
- 或者在某些系统上
- sudo service sshd start
(2)检查 SSH 服务状态:
- sudo systemctl status sshd
- 或者
- sudo service sshd status
(3)查看端口是否开放:
- sudo netstat tnlp | grep :22
如果未开放,则重新启动 SSH 服务。
(4)测试网络连通性:
- ping www.baidu.com
如果无法访问外网,检查 DNS 设置和网络连接。

(5)开放防火墙端口:
直接打开端口:
- sudo iptables I INPUT p tcp dport 22 j ACCEPT
永久打开端口(CentOS 7):
- sudo firewallcmd permanent addservice=ssh
- sudo firewallcmd reload
永久打开端口(CentOS 6):
- sudo vim /etc/sysconfig/iptables
- 添加以下行并保存
- A RHFirewall1INPUT m state state NEW m tcp p tcp dport 22 j ACCEPT
- sudo service iptables restart
2. Host key verification failed(主机密钥验证失败)
报错信息:
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
- @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
- IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
- Someone could be eavesdropping on you right now (maninthemiddle attack)!
- It is also possible that the RSA host key has just been changed.
- ...
- Host key verification failed.
可能原因:
远程服务器的公钥已经更改
~/.ssh/known_hosts
文件中记录的旧密钥与当前不匹配
客户端与服务器之间的中间人攻击风险
解决方法:
(1)修改配置文件:
在~/.ssh/config
或/etc/ssh/ssh_config
中添加以下配置:
- StrictHostKeyChecking no
- UserKnownHostsFile /dev/null
这种方法适用于内网环境且安全性要求不高的情况。
(2)删除已知主机密钥:
编辑~/.ssh/known_hosts
文件,删除对应服务器的条目:
- sed i '/123.123.123.111/d' ~/.ssh/known_hosts
或者直接删除整个文件:
- rm ~/.ssh/known_hosts
再次尝试连接,系统会重新提示是否接受新的主机密钥。
3. Permission denied, please try again(权限被拒绝)
报错信息:
- Permission denied, please try again.
- password authentication failed or bad ownership or modes for directory /root/.ssh
可能原因:
密码错误
用户权限问题,例如用户目录或.ssh
目录权限不正确
SSH 配置禁止 root 用户登录
解决方法:
(1)检查密码是否正确:确保输入的密码正确。
(2)修改目录权限:确保用户主目录和.ssh
目录权限正确:
- sudo chown R user:user /home/user/.ssh
- sudo chmod 700 /home/user/.ssh
- sudo chmod 600 /home/user/.ssh/authorized_keys
如果使用的是 root 用户,将/home/user
替换为/root
。
(3)修改 SSH 配置文件:允许 root 用户登录,编辑/etc/ssh/sshd_config
:
- PermitRootLogin yes
然后重启 SSH 服务:
- sudo systemctl restart sshd
注意:允许 root 用户登录可能会带来安全隐患,建议根据实际情况进行配置。
4. SSH 公私钥正确的情况下免密登录失败
报错信息:即使公私钥配置正确,每次登录仍然提示输入密码。
可能原因:公私钥权限不正确,或者服务器上的authorized_keys
配置有误。
解决方法:
(1)检查公私钥权限:确保私钥文件权限为 600:
- chmod 600 /path/to/private_key
确保公钥文件权限为 644:
- chmod 644 /path/to/public_key
(2)检查 authorized_keys 文件:确保服务器上的~/.ssh/authorized_keys
文件中正确配置了公钥,并且没有多余的空格或错误。
(3)重启 SSH 服务:在修改完配置后,重启 SSH 服务使配置生效:
- sudo systemctl restart sshd
二、相关问答FAQs
Q1: SSH 连接时报“Permission denied (publickey)”怎么办?
A1: 这个错误通常是由于公钥认证失败引起的,可以按照以下步骤排查解决:
1、确保私钥文件已正确添加到sshagent
,使用sshadd /path/to/private_key
添加私钥。
2、确保服务器上的~/.ssh/authorized_keys
文件中包含正确的公钥内容,可以使用sshcopyid user@hostname
重新复制公钥。
3、确保本地和服务器上的.ssh
目录权限设置正确,目录权限应为 700,文件权限应为 600。
4、检查服务器的 SSH 配置文件/etc/ssh/sshd_config
,确认PubkeyAuthentication
设置为yes
。
5、如果问题依旧存在,可以尝试重启 SSH 服务:sudo systemctl restart sshd
。