why需要免密登陸?
在建構伺服器叢集環境的時候,經常需要配置相同的環境,這種情況下,一般要使用scp在不同的伺服器之間進行檔案的複制,每次都需要輸入密碼太麻煩,再一個伺服器叢集之間的某些通信有時候也需要免密登陸後進行某些操作。
歸根結底的操作都是ssh(secure shell)遠端登陸!!!
what免密登陸(免密登陸原理)?
ssh遠端登陸有兩種驗證方式:
1.使用使用者名+密碼驗證;
2.使用公鑰+私鑰驗證;
公鑰+私鑰驗證:即在源伺服器上先生成一份公鑰和一份密鑰,将公鑰複制到目标伺服器,利用指令将公鑰添加至目标伺服器的授權清單(authorized_keys)。當有伺服器帶着公鑰申請連接配接伺服器時,目标伺服器首先在authorized_keys中查找是否存在該公鑰,如果存在則開始進行驗證。首先生成一個随機字元串,利用對應公鑰進行加密,然後傳回給申請連接配接的伺服器,申請連接配接伺服器利用私鑰進行解密,再将字元串傳回給目标伺服器完成驗證,進行後續操作。
how進行免密登陸?
前提:首先我們需要準備兩台或兩台以上伺服器或虛拟機,配置好靜态ip
1.配置hosts檔案
vi /etc/hosts
在檔案中加入你叢集機器的ip和對應的域名
例如:
192.168.172.66 node01
192.168.172.67 node02
192.168.172.68 node03
192.168.172.69 node04
2.生成公鑰+秘鑰
ssh-keygen -t rsa
在執行上述指令的過程中一路enter即可
生成完成之後,可以在~/.ssh目錄下
-rw-------. 1 root root 1675 Sep 24 19:39 id_rsa
-rw-r--r--. 1 root root 401 Sep 24 19:39 id_rsa.pub
3.傳遞公鑰到目标機
[[email protected] .ssh]# ssh-copy-id -i ./id_rsa.pub [email protected]
[email protected].168.172.67's password:
Now try logging into the machine, with "ssh '[email protected].168.172.67'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting
ssh-copy-id -i ./id_rsa.pub [email protected]會做兩件事
a.在192.168.172.67上生成 authorized_keys檔案;
b.将源伺服器的id_rsa.pub寫入到192.168.172.67(目标伺服器)的檔案中;
4.測試免密登陸
5.其他的以此類推