1、安全密鑰
加密是對資訊進行編碼和解碼的技術,它通過一定的算法(密鑰)将原本可以直接閱讀的明文資訊轉換成密文形式。密鑰即是密文的鑰匙,有私鑰和公鑰之分。在傳輸資料時,如果 擔心被他人監聽或截獲,就可以在傳輸前先使用公鑰對資料加密處理,然後再行傳送。這樣, 隻有掌握私鑰的使用者才能解密這段資料,除此之外的其他人即便截獲了資料,一般也很難将其破譯為明文資訊。
一言以蔽之,在生産環境中使用密碼進行密碼驗證終歸存在着被暴力破解或嗅探截獲的 風險。如果正确配置了密鑰驗證方式,那麼 sshd 服務程式将更加安全。
密鑰就是密文的鑰匙的簡稱,其實際上是一種加密算法,有公私鑰之分。
2、無密碼登入實作
以root使用者身份登入主機A,然後通過指令ssh-keygen生成公私密鑰對,将這個使用者的公鑰放到主機B上。這樣,這個使用者以後再用ssh連接配接主機B時,不用輸入密碼就能直接登入成功。
實作步驟:
1、root使用者身份登入主機A,通過ssh-keygen指令生成公私密鑰:
[root@jiang ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
#指定私鑰的儲存檔案,不指定預設是/root/.ssh/id_rsa檔案
Enter passphrase (empty for no passphrase):
#這裡是為私鑰設定密碼,可以不設定,直接回車
Enter same passphrase again: #再次輸入私鑰密碼
Your identification has been saved in /root/.ssh/id_rsa.
#私鑰的配置檔案是/root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub.
#公鑰的配置檔案是/root/.ssh/id_rsa.pub
2、将生成的公鑰放到主機B上:
[root@jiang ~]# ssh-copy-id [email protected]
[email protected]'s password:
Now try logging into the machine, with "ssh '[email protected]'", and check in:
.ssh/authorized_keys #表示将公鑰儲存到主機B家目錄下的.ssh/authorized_keys檔案中
to make sure we haven't added extra keys that you weren't expecting.
3、驗證是否成功:
ssh 主機B的IP
4、設定隻允許密鑰驗證登入(可選)
可以對伺服器B設定為隻允許密鑰驗證登入,拒絕傳統的密碼驗證方式。記得在 修改配置檔案後儲存并重新開機 sshd 服務程式。
在伺服器B上進行下面設定:
[root@jt ~]# vi /etc/ssh/sshd_config
PasswordAuthentication no #在檔案中找到這一行,并将yes修改為no
[root@jt ~]# systemctl restart sshd
這樣,隻有A伺服器可以免密登入,其他伺服器無法通過傳統的密碼驗證方式登入B伺服器,除非也設定免密登入。
5、配置ssh hostname登入方式
如果IP記不住,可以考慮設定這種登入方式。在伺服器A上進行如下設定:
在/etc/sysconfig/network檔案中添加:
NETWORKING=yes
HOSTNAME=*
在/etc/hosts檔案的最後一行添加主機A和B的ip和主機名:
A_IP A_HOSTNAME
B_IP B_HOSTNAME
重新開機network服務:service network restart
6、可以通過ssh hostname登入主機
3、過程說明
1、ssh-keygen指令用于生成公私鑰,可以加-t rsa,也可以不加;
2、每一個使用者都有自己的公私密鑰,不可混淆。使用者的公私密鑰都預設放在家目錄的.ssh目錄下
3、ssh-copy-id用于将公鑰上傳到别的主機,用法類似scp。通用格式是:
ssh-copy-id [-i 公鑰檔案] [使用者名]@主機IP
不指定檔案就預設上傳公鑰檔案;
不指定以什麼使用者登入主機B的話,就預設以目前使用者登入,前提是主機B有這個使用者;
4、ssh-copy-id指令原理是将主機A公鑰的内容添加到主機B的authorized_keys檔案中;