最近在搭一个集群环境。为了能让Master节点和Slave节点之间可以快速通信,因此须要配置Master节点向Slave节点的免密登陆。网上的教程很是多,可是我按照正常流程走了一遍以后仍是会出现问题。因此这里我试着将我配置时候遇到的问题以及相应的解决方案记录下来。html
假设当前我想要在本地主机远程登陆服务器。为了方便起见,咱们将本地主机命名为host,服务器命名为server。
1.打开host上的终端,进入.ssh
目录,生成本地的公有密钥和私有密钥,指令以下。若是没有.ssh目录,则先执行一下指令ssh localhost
面试
cd ~/.ssh
rm ./id_rsa*
#删除以前的密钥文件
ssh-keygen -t rsa
#一直按回车直至命令执行结束
完成后咱们会看见在.ssh文件下生成了两个文件,分别是id_rsa.pub和id_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
经常在配完以上三步后咱们并不能无密钥登陆,当咱们试图本地登陆时仍是会提示咱们输入密码。那么可能出错的缘由以下spa
ssh对于文件的权限要求很高,既不能过宽也不能过窄,两者都会形成无密钥登陆的失败。因此咱们能够经过如下的指令将其设置为正确的权限。其中.ssh文件夹应该是700,authorized_keys文件应该是600。日志
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
sudo vi /etc/ssh/sshd_config
找到
StrictModes yes
改为
StrictModes no
- 全部的指令若是出现 permission denied字样,则说明你没有相应的权限,详情请自行搜索如何使用户得到管理员权限
- ssh很是讲求安全性,因此远程主机上的用户应当和本地主机上的用户对应,也就是说a@host没法经过ssh登陆b@server。须要在server上先建立和本地对应的用户a,而后再进行后序的操做
ssh -vvv username@serverip
能够显示出ssh登陆过程的完整操做,能够帮助识别失败的缘由- 在服务器端查看日志肯定问题
sudo tail /var/log/secure
SSH免密登陆原理code
想要了解更多开发技术,面试教程以及互联网公司内推,欢迎关注个人微信公众号!将会不按期的发放福利哦~server