ssh链接报错,免密不生效等情况分析和处理。
概要
首先,我们应该先排除服务器宕机,网络不通等外部情况。 如果对现象非常明显,可以先根据经验处理。 如果依然未解决,则尽可能获取报错,日志等信息来分析。 1. ssh时,加上-v(v的个数越多日志越详细)来输出客户端的日志信息。 2. 想别的办法进入服务器,看sshd的日志。
代码语言:javascript复制# 开一个调试模式的sshd来测试
/usr/sbin/sshd -p 2222 -d
问题列表
免密登录失败
linux如果免密登录失败,会要求输入密码。默认不会打印任何报错信息,此时需要加上-v来打印一些日志。 以下是一些已知问题的解决办法,可根据报错信息检索或挨个尝试。
目录文件权限问题
秘钥是放在用户目录下的.ssh目录下。这个权限过于宽松就会导致问题。日志中通常会有体现。
代码语言:javascript复制Permissions 0777 for '/home/myuser/.ssh/id_rsa' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.
What permissions levels should i give to the id_rsa file?
~/
权限 700~/.ssh
,权限 700~/.ssh/id_rsa
,权限600~/.ssh/authorized_keys
权限 600
修复脚本
代码语言:javascript复制chmod 700 ~/
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 600 ~/.ssh/authorized_keys
authorized_keys文件名错误
这是容易被忽略的情况。
代码语言:javascript复制debug2: we did not send a packet, disable method
注意 ~/.ssh/authorized_keys
文件名有没有写错。
没有这个文件,sshd会认为未启用sshkey登录。
其它报错
配置了AllowUsers导致账户无法登录
最近碰到一个问题,账号密码都正确,但ssh怎么都进不去。甚至sshkey免密也无法登录,无报错直接退出。这个问题最头疼的是,客户端并没有什么有效的信息输出。所以只能想办法进入服务器看看了。
通过别的账号登录服务器后,su到myuser中,测试账号密码。也发现账号密码是正确的。由此判断,问题出在sshd中,通过查看sshd的日志,终于发现了相关的报错信息。最终确认是由于sshd中的/etc/ssh/sshd_config
,配置了AllowUsers导致的。
服务端报错信息
代码语言:javascript复制Apr 2 16:01:49 myhost[23612]: User myuser from myhost not allowed because not listed in AllowUsers
Apr 2 08:01:49 myhost sshd[23613]: input_userauth_request: invalid
将用户名配置到AllowUsers后,重启sshd即可正常登陆。 参考
伪终端请求分配失败
可能的应用程序泄漏了伪终端,比如大量的ssh。
代码语言:javascript复制PTY allocation request failed on channel
解决办法
代码语言:javascript复制umount /dev/pts
mount devpts /dev/pts -t devpts
ssh登录不了,如何在远程主机上执行命令?
tty的问题影响的是交互式登录,可以直接非交互的方式执行命令。
代码语言:javascript复制ssh ${ip} umount /dev/pts
ssh ${ip} mount devpts /dev/pts -t devpts