Ubuntu ssh免密登录
ssh免密登录工作原理
server A免登录到server B:
1.在A上生成公钥私钥。
2.将公钥拷贝给server B,要重命名成authorized_keys(从英文名就知道含义了)
3.Server A向Server B发送一个连接请求。
4.Server B得到Server A的信息后,在authorized_keys中查找,如果有相应的用户名和IP,则随机生成一个字符串,并用Server A的公钥加密,发送给Server A。
5.Server A得到Server B发来的消息后,使用私钥进行解密,然后将解密后的字符串发送给Server B。Server B进行和生成的对比,如果一致,则允许免登录。
总之:A要免密码登录到B,B首先要拥有A的公钥,然后B要做一次加密验证。对于非对称加密,公钥加密的密文不能公钥解开,只能私钥解开。
1.在A上生成公钥私钥。
2.将公钥拷贝给server B,要重命名成authorized_keys(从英文名就知道含义了)
3.Server A向Server B发送一个连接请求。
4.Server B得到Server A的信息后,在authorized_keys中查找,如果有相应的用户名和IP,则随机生成一个字符串,并用Server A的公钥加密,发送给Server A。
5.Server A得到Server B发来的消息后,使用私钥进行解密,然后将解密后的字符串发送给Server B。Server B进行和生成的对比,如果一致,则允许免登录。
总之:A要免密码登录到B,B首先要拥有A的公钥,然后B要做一次加密验证。对于非对称加密,公钥加密的密文不能公钥解开,只能私钥解开。
注意:上述只能实现单向免密登录
接下来配置相互免密登录:
其关键点在,收集所有主机的公钥将其共享到master的authorized_keys文件中,然后再用scp复制到各个主机的.ssh文件夹下
0、给所有没安装ssh的主机安装ssh
sudo apt-get install ssh sudo apt-get install rsync
1、修改master的配置文件 gedit /etc/hosts
给每个需要互联的机器设置IP地址 和 名称(每台机中自行修改)
如127.0.0.1 localhost
192.168.137.129 master
192.168.137.130 slave1
192.168.137.131 slave2
2、给每个主机生成公钥和秘钥
ssh-keygen –t rsa -->直接回车生成的密钥对:id_rsa和id_rsa.pub,
默认存储在"/home/hadoop/.ssh"目录下。
先设置第六步
3、master 先将自身的公钥加到key中去,之后将所有slave机上的公钥发给master机
master中: cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
slave1中: scp ~/.ssh/id_rsa.pub root@master:~/id_rsa.pub
先发slave1,执行第4步后,再发slave2
4、把slave追加到授权的key里面去。
master 中: cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
rm ~/id_rsa.pub %删掉已经合并的公钥。
有别的机子再执行第三步
5、修改master中key的权限
chmod 600 ~/.ssh/authorized_keys
6、修改每台机子的配置文件 gedit /etc/ssh/sshd_config
将图片中提示的那三行上面的permitRootLogin 改成 yes 这样就可以连接远程的root用户(在需要连的那台机子上 改)
service sshd restart -->重启ssh服务
7、将key传到每个slave机中
master: scp ~/.ssh/authorized_keys root@slave1:~/.ssh/authorized_keys
(scp ~/.ssh/authorized_keys 远程用户名@主机名或IP: %scp用法)
重复直到所有机子的key都一样
给每个机子的.ssh 文件夹权限 :chmod 700 ~/.ssh
8、测试连接
ssh slave1 -->连接用户
exit -->退出连接用户