SSH免密登录--正常流程和异常处理

序言

最近在搭一个集群环境。为了能让Master节点和Slave节点之间能够快速通讯,所以需要配置Master节点向Slave节点的免密登录。网上的教程非常多,但是我按照正常流程走了一遍之后还是会出现问题。所以这里我试着将我配置时候遇到的问题以及相应的解决方案记录下来。

正常流程

假设当前我想要在本地主机远程登录服务器。为了方便起见,我们将本地主机命名为host,服务器命名为server。
1.打开host上的终端,进入.ssh目录,生成本地的公有密钥和私有密钥,指令如下。如果没有.ssh目录,则先执行一下指令ssh localhost

cd ~/.ssh
rm ./id_rsa* #删除之前的密钥文件
ssh-keygen -t rsa #一直按回车直至命令执行结束

完成后我们会看见在.ssh文件下生成了两个文件,分别是id_rsa.pubid_rsa,这两个文件分别代表着你的公钥和你的密钥。其中你的密钥一定不能发给别人

2.将host的公钥发送到server

scp ~/.ssh/id_rsa.pub username@serverip:/directory

3.将host的公钥添加到server的认证列表authorized_keys中。下面的操作全部在server端完成

cd ~/.ssh
cat directory/id_rsa.pub >> authorized_keys

如果一切正常,你在之后在host端直接ssh username@serverip就可以无密钥登录server了。

如果不正常

常常在配完以上三步后我们并不能无密钥登录,当我们试图本地登录时还是会提示我们输入密码。那么可能出错的原因如下

权限问题

ssh对于文件的权限要求很高,既不能过宽也不能过窄,二者都会造成无密钥登录的失败。所以我们可以通过以下的指令将其设置为正确的权限。其中.ssh文件夹应该是700,authorized_keys文件应该是600。

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

StrictModes问题

sudo vi /etc/ssh/sshd_config
找到
StrictModes yes
改成
StrictModes no

其它

  1. 所有的指令如果出现 permission denied字样,则说明你没有相应的权限,详情请自行搜索如何使用户获得管理员权限
  2. ssh非常讲求安全性,所以远程主机上的用户应当和本地主机上的用户对应,也就是说a@host无法通过ssh登录b@server。需要在server上先创建和本地对应的用户a,然后再进行后序的操作
  3. ssh -vvv username@serverip 可以显示出ssh登录过程的完整操作,可以帮助识别失败的原因
  4. 在服务器端查看日志确定问题sudo tail /var/log/secure

参考文章

SSH免密登录原理

SSH免密登录--正常流程和异常处理_第1张图片
想要了解更多开发技术,面试教程以及互联网公司内推,欢迎关注我的微信公众号!将会不定期的发放福利哦~

你可能感兴趣的:(ssh,ssh-key)