使用雲主機時,出于安全性考慮,需要設定ssh登入。
ssh主要有兩種登入方式:第一種為密碼密碼登入,第二種為公鑰登入,登入不需要輸入密碼。這裡主要分析密鑰登入方式
(一)基礎
1) 公鑰:用于加密,存在于伺服器
2) 私鑰:用于解密,存在于客戶機
(二)流程
1)用戶端向伺服器發出連接配接請求
2)伺服器檢視用戶端公鑰(~/.ssh/authorized_keys)該客戶機(客戶機标志:使用者@Host)對應的公鑰
3)伺服器驗證公鑰合法,則産生一條随機數(challenge),用公鑰加密發送給用戶端
4)用戶端用私鑰解密回傳伺服器端。
5)随機數一緻,認證通過。
(三)操作
1,生成密鑰指令:
# ssh-keygen -t rsa
指令執行完,cd至.ssh檔案夾就可以看到生成的公鑰(id_rsa.pub)檔案,私鑰檔案(id_rsa)
注:
私鑰都是以-----BEGIN RSA PRIVATE KEY-----開頭,以-----END RSA PRIVATE KEY-----結尾
ssh-keygen可以在用戶端執行,也可以在服務端執行。
不論在哪裡執行,最終目的都是把公鑰檔案注入Server端的authorized_key檔案中,私鑰儲存在本地。
2,上傳公鑰(id_rsa.pub)檔案,将其寫入到伺服器端對應的authorized_key檔案中
可以用scp傳輸,也可以用ssh-copy-id工具來傳送(其實就是一個腳本)
2.1)在用戶端,用ssh-copy-id,将公鑰複制到遠端伺服器端
# ssh-copy-id -i .ssh/id_rsa.pub 使用者名@192.168.x.xxx
注意:
ssh-copy-id 将key寫到遠端機器的 ~/.ssh/authorized_key檔案中。
第一次ssh-copy-id需要密碼登入。
2.2)也可以用scp的方式将公鑰複制到遠端伺服器端
若用scp,則公鑰檔案傳輸到伺服器端後,需要再在伺服器端,用cat指令,把公鑰寫入伺服器端的~/.ssh/authorized_keys檔案中。
或者直接在用戶端執行幾個指令的集合:
# cat ~/.ssh/id_rsa.pub | ssh [email protected] "cat - >> ~/.ssh/authorized_keys"
3,在用戶端,指定私鑰,進行無密碼登入伺服器端。
#ssh -i ~/.ssh/id_rsa [email protected]
(四)關閉密碼登陸
1,修改SSH的配置檔案/etc/ssh/sshd_config
PasswordAuthentication yes #使用密碼登入
修改為:
PasswordAuthentication no # 關閉密碼登入,使用密鑰登入
2、儲存後重新開機SSH服務。
# systemctl restart sshd
3、其它參數
#PubkeyAuthentication yes # 此選項為key登入方式參數,預設是注釋掉的,并且是預設開啟的。
是以,禁用密碼登入後,若此參數不配置禁用,則預設使用密鑰登入。
sshd_config參數詳情參考:http://www.jinbuguo.com/openssh/sshd_config.html
(五)常見錯誤
密鑰登入報錯:
[[email protected]]# ip netns exec qdhcp-488d4132-fa9a-408f-b430-ff3967d550b8 ssh -i ~/.ssh/id_rsa [email protected]
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
SHA256:cv661XpC4DfQnM3royqAPcsb9xiNpI1HjDfOxPJNat8.
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message.
Offending RSA key in /root/.ssh/known_hosts:38
RSA host key for 192.168.1.200 has changed and you have requested strict checking.
Host key verification failed.
處理方法:
[[email protected]]# vim /root/.ssh/known_hosts
删掉/root/.ssh/known_hosts檔案中,192.168.1.200對應的一行資料,再次登入可成功。
原因:
一台主機上有多個Linux系統,會經常切換,那麼這些系統使用同一ip,登入過一次後就會把ssh資訊記錄在本地的~/.ssh/known_hsots檔案中,切換該系統後再用ssh通路這台主機就會出現沖突警告,需要手動删除修改known_hsots裡面的内容。
參考:https://blog.csdn.net/liu_qingbo/article/details/78383892