ssh 连接时常见错误及解决办法 1.SSH连接时出现Connection refused,如下: 报错如下: ssh: connect to host 123.123.123.111 port 22: Connection refused 通常是由于22端口未打开、ssh服务未启动或防火墙禁止22端口等原因引起的 解决办法: 开放端口,启动服务或者禁用防火墙等 2.SSH连接时出现Host key verification failed 报错如下: Host key verification failed 通常是由于访问使用的公钥与服务器记录的差异引起的 ssh服务会把每个曾经访问过计算机或服务器的公钥(public key),记录在~/.ssh/known_hosts 当下次访问曾经访问过的计算机或服务器时,ssh就会核对公钥,如果和上次记录的不同,OpenSSH会发出警告。 而ssh对主机的public_key的检查是有等级的,根据等级执行不同的策略。(StrictHostKeyChecking就是配置等级的参数) [1]StrictHostKeyChecking=no 最不安全的级别,提示最少,应在相对安全的内网测试时使用。(当连接的服务器的公钥在本地不存在,就会自动添加到文件(默认是known_hosts)中,并且给出警告。 [2]StrictHostKeyChecking=ask 默认的级别。如果连接的服务器的公钥和本地的known_hosts文件中不匹配,就给出提示(Host key verification failed),并拒绝登录。 [3]StrictHostKeyChecking=yes 最安全的级别,如果连接的服务器的公钥和本地的known_hosts文件中的不匹配,就拒绝连接,不会提示详细信息。 解决办法: 1) 可更改安全选择最低的安全级别。在.ssh/config或/etc/ssh/ssh_config)中配置 StrictHostKeyChecking no UserKnownHostsFile /dev/null (将knownhostfile设为/dev/null),为了方便使用在known_hosts中了) 2) 删除对应ip的在known_hosts相关信息 3) 直接删除.ssh/known_hosts文件 3.SSH公私钥正确的情况下免密登录失败 有的时候我们经常会遇到:在服务器上配置ssh公钥后,一段时间可以免密码登录,后来登录时,每次都提示要输入密码。这时我们可以删除known_hosts,重新把id_rsa.pub添加到服务器~/.ssh/authorized_keys下。 如果这个办法也不行,我们(首先考虑是权限问题)要查看日志。 /var/log/auth.log日志中报错如下: coffeeserver sshd[6761]: Authentication refused: bad ownership or modes for directory /root/.ssh /var/log/secure日志中报错如下: Authentication refused: bad ownership or modes for directory /root/.ssh 这些日志都告诉了我们/root/.ssh的目录的权限的配置出现了(权限应为700) 解决办法: 更改目录及文件权限 chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys 4.SSH连接时密码正确,登陆失败,出现Permission denied, please try again 报错如下: Password authentication failed 或 Permission denied, please try again 通常是由于/etc/ssh/sshd_config的PasswordAuthentication或PermitRootLogin参数的配置引起的 补充: 还有特殊一种情况,你要连接的这台服务器的ip地址与你局域网中的某台电脑的ip地址一致,造成冲突。(这种情况,无论怎么改都会失败,会让你怀疑自己。解决方法只能是一方改IP或关闭其中一方,先解决冲突问题) 解决办法: 1)修改相关配置文件 (1)查看本服务器和电脑的防火墙设置,是否打开ssh服务,22端口(一般都是打开的) 如果服务不是打开的要将服务启动,防火墙开放22端口(配置规则看本文目录第1条中) (2)编辑sshd_config文件 vim /etc/ssh/sshd_config 将PasswordAuthentication前面的#号去掉 将PasswordAuthentication 设为yes (3) 重启sshd服务 /etc/init.d/sshd restart (centos6) systemctl restart sshd(centos7) 2)修改相关配置文件 (1)基本上与上一个方法相同,但编辑sshd_config文件的另一个参数 vim /etc/ssh/sshd_config 将PermitRootLogin前面的#号去掉 将PermitRootLogin设为yes (2)重启sshd服务 /etc/init.d/sshd restart (centos6) systemctl restart sshd(centos7) 5.SSH连接时出现Permission denied, please try againssh_exchange_identification: read: Connection reset by peer 报错如下: Permission denied, please try againssh_exchange_identification: read: Connection reset by peer 原因是由于所访问的服务器启用了tcp_wrapper,拒绝接受该ip或网段发起访问的服务,可能是限制了ip或是网段 解决办法: 1)修改发起访问端的ip或网段 该方法在无法进入被访问端服务器时使用,但可用率不高,因为大多少情况下是对网段进行限制并开放某些IP。 建议联系 系统管理员解除限制或放开该IP或网段 (1)查看本机的ip或网段 ip a (2)修改一个正在使用的网卡的配置文件 例如: vim /etc/sysconfig/network-scripts/ifcfg-eth0 (重点修改IPADDR,NETMASK,GATEWAY,将其修改为新网段的IP) TYPE=Ethernet BOOTPROTO=none DEFROUTE=yes NAME=eth0 DEVICE=eth0 ONBOOT=yes IPADDR=10.10.10.10 NETMASK=255.255.254.0 GATEWAY=10.10.10.254 DNS1=.8.8.8.8 (3) 重启网卡 service network restart(centos6) systemctl restart network(centos7) 2)进入被访问端解除限制或放开IP 进入/etc/hosts.allow中进行修改 (123.123.123.123此处代表发起访问端的IP) vim /etc/hosts.allow 追加 sshd:123.123.123.123:allow 或仅注释一行 #sshd:123.123.123.123:deny 或注释所有规则,并添加 sshd:all:allow 6.Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password) (执行脚本出现) 没有加密钥 总结: 1.服务未启动,防火墙,iptables策略原因 2.服务器改变但是ip未改变造成的原因,导致known_hosts信息不一致 3.ssh相关文件权限不对 4.ssh服务配置文件不允许远程或者是不允许使用密码登录 5.sshd策略,拒绝改网段的ip登录 6.也可能是ip地址不是目标主机导致的