ssh是個啥?
SSH是一種網絡協定,用于計算機之間的加密登入。如果一個使用者從本地計算機,使用SSH協定登入另一台遠端計算機,我們就可以認為,這種登入是安全的,即使被中途截獲,密碼也不會洩露。最早的時候,網際網路通信都是明文通信,一旦被截獲,内容就暴露無疑。1995年,芬蘭學者Tatu Ylonen設計了SSH協定,将登入資訊全部加密,成為網際網路安全的一個基本解決方案,迅速在全世界獲得推廣,目前已經成為Linux系統的标準配置。
SSH隻是一種協定,存在多種實作,既有商業實作,也有開源實作。
SSH之是以能夠為啥安全?
在于它采用了公鑰加密,整個過程是這樣的:
- 遠端主機收到使用者的登入請求,把自己的公鑰發給使用者。
- 使用者使用這個公鑰,将登入密碼加密後,發送回來。
- 遠端主機用自己的私鑰,解密登入密碼,如果密碼正确,就同意使用者登入。
SSH防不住啥?
這個過程本身是安全的,但是實施的時候存在一個風險:如果有人截獲了登入請求,然後冒充遠端主機,将僞造的公鑰發給使用者,那麼使用者很難辨識真僞。因為不像https協定,SSH協定的公鑰是沒有證書中心(CA)公證的,也就是說,都是自己簽發的。
可以設想,如果攻擊者插在使用者與遠端主機之間(比如在公共的wifi區域),用僞造的公鑰,擷取使用者的登入密碼。再用這個密碼登入遠端主機,那麼SSH的安全機制就蕩然無存了。這種風險就是著名的"中間人攻擊"(Man-in-the-middle attack)。
如何安裝SSH?
Linux預設已經安裝
SSH咋用咧?
ssh user@host
釋義:使用者名
user
,登入遠端主機
host
,(ssh預設端口是
22
,不加端口号就是預設的端口登陸)
加上端口号:
ssh -p 10000 user@host
user
,通過端口
10000
host
SSH使用捷徑:公鑰登入
使用密碼登入,每次都必須輸入密碼,非常麻煩。好在SSH還提供了公鑰登入,可以省去輸入密碼的步驟。
所謂"公鑰登入",就是使用者将自己的公鑰儲存在遠端主機上。登入的時候,遠端主機會向使用者發送一段随機字元串,使用者用自己的私鑰加密後,再發回來。遠端主機用事先儲存的公鑰進行解密,如果成功,就證明使用者是可信的,直接允許登入shell,不再要求密碼。
用
ssh-keygen
指令生成一個:
ssh-keygen
運作上面的指令以後,系統會出現一系列提示,可以一路回車。其中有一個問題是,要不要對私鑰設定密碼(passphrase),如果擔心私鑰的安全,這裡可以設定一個。
運作結束以後,在
$HOME/.ssh/
目錄下,會新生成兩個檔案:
id_rsa.pub
和
id_rsa
。前者是你的公鑰,後者是你的私鑰。
這時再輸入下面的指令,将公鑰傳送到遠端主機host上面:
ssh-copy-id user@host
好了,從此登入,就不不用輸入密碼了。
如果沒用的話,就打開遠端主機的
/etc/ssh/sshd_config
這個檔案,檢查下面幾行前面"#"注釋是否取掉。
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
然後,重新開機遠端主機的ssh服務。
systemctl restart sshd.service