SSH是基於非對稱加密實現的。
html
非對稱加密的特色web
第一次登錄時,remote server會將本身的公鑰下發給client端。同時提示client以下信息算法
The authenticity of host 'ssh-server.example.com (12.18.429.21)' can't be established. RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d. Are you sure you want to continue connecting (yes/no)?
客戶端選yes後,會將遠程主機的host, ip,公鑰
放置到本身的.ssh/known_hosts文件中,這使得後續登陸,能夠省去第一步。一個典型的know_hosts文件樣例centos
ldn01.jamieweb.net,139.162.222.67 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC4bVleGrAZFttdMBen/ExLWbUUr5UaaX3Wd8U4nwH6LEaOMxuYu2cyrBuwIVZ9gjSoI0fEWhe345HeQJbdNzE/rd5ojebtS9bQiAB9+GVNKHxemBP01M0OaZJVA/GJnSzjdoEfrCGG8SWIDPQjY02yTQwgQHW5zYlr12Hq3FjKzofJ1Q2PSWbCy3crsA/R4vPHRVLPd8RDj+EXWVwvFgTHriuQWnt9Q/djy1LOPrqNgHn1n17cIED1M0zgXpImoLNC+Z44DmopVdmtwRW57IkedktWQdpCNRYTyOj/as/xn5YStXIWwxila16NYeq6O7zqoedWPiad6qnFloobOcft nyc01.jamieweb.net,157.230.83.95 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8Gh3exdEvvWqZHdbBogN3kbfutx3af0oO9dof1L+4vFsA8xmMOURjdB/BF9uF44i+1yosOhxh+k0Kjgeo0JAjPWy8e94SpEn2oUFJ3/9y1QzpWR81aAi/B9gSX9KR6uDys1yIhjjBKE0omP6vvSSVndY7BkxXnxBsmvWqeCWP59tFFDVFADG4FLRQW6IPUlD3mJLXxzsbsBUP4x67TAFeHynL/ZyImSlHXWBow3hWopwPouqQpkcIcUZxdt8zR9xmAiEwk8wUDWQg5aMoYp2a8zy7fuUL6PXyomRpoVWKHyZposl1cmST88NXjK+J14oWPHzKAd7zcY29XOXSbKnR
客戶端基於該公鑰,加密本身的登陸密碼,發送給remote server 。 remote server基於本身的私鑰,解密消息,得到client發送的密碼,完成認證。因爲私鑰只有server端有,因此即使中間人攻擊,拿刀消息,也沒法解密獲取client發送的密碼安全
在第一次登陸時,server下發本身的公鑰,client須要信任並存儲該公鑰,這一步若是被中間人攻擊,中間人下發了本身的公鑰。從而可以獲取到client的登陸密碼, 中間人再做爲client去跟remote server完成登陸
網絡
前面SSH登陸中,每次都要輸入本身的密碼,很繁瑣。能夠繼續利用非對稱加密的原理。client本身也生成一組密鑰對。將公鑰上傳至remote server。這樣client和server雙方,彼此都有一組公私密鑰對,整個登陸過程,均可以加密進行,而不須要密碼。具體步驟。ssh
client使用ssh-keygen
命令,生成一組公私密鑰對。生成後通常在.ssh文件夾下,其中id_rsa爲私鑰,id_rsa.pub爲公鑰,將公鑰上傳至remote server 。這一步僅需作一次。加密
client的公鑰上傳後,通常存在server 端的/.ssh/authorized_keys文件中。.net
將公鑰上傳至server 的authorized_keys文件的方法有幾種rest
ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
,也能夠直接登陸到server,而後手動編輯authorized_keys文件。ssh-copy-id user@host
.ssh 文件像user的.profile同樣,是跟用戶相關的。也即root和ops這兩個用戶,其.ssh的路徑和其下的內容是不同的。.ssh文件的目錄結構
查詢守護進程的狀態service sshd status
重啓service sshd restarts
啓動service sshd start
中止service sshd stop
通常更改了/etc/ssh/sshd_config
文件,則須要重啓sshd服務
Authentication refused: bad ownership or modes for file /somepath/.ssh/authorized_keys
這個錯誤的緣由是,SSH server會在有登陸訪問請求時,檢查authorized_keys文件的權限是否配置正確,具體來講,就是不能開放給除當前用戶意外的其它用戶寫權限。因此解決辦法很簡單。確認下authorized_keys文件的group和Others是否寫權限,有的話,直接去掉
chmod g-w authorized_keys
之因此有這個限制緣由是,一個.ssh文件應該只跟對應的用戶相關,至關於用戶的profile,該文件的編輯權限,應該只有當前用戶,和root能夠去編輯。而不能容許其它用戶去編輯,不然其它用戶能夠很容易的添加一些不惡意的client的公鑰到該文件,使得惡意的client能夠登陸到該server。
固然,你能夠不改authorized_keys的權限,而是把/etc/ssh/sshd_config
配置文件中的StrictModes 設爲no ,從而使得sshd不對文件的權限作校驗,但很是不建議這麼作。
https://www.jianshu.com/p/33461b619d53
https://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html
https://www.daveperrett.com/articles/2010/09/14/ssh-authentication-refused/
https://tldp.meulie.net/en/solrhe/chap15sec122.html