使用ssh遠程連接服務器,有兩種身份校驗方式:賬號密碼和秘鑰。使用秘鑰的方式理論上更加安全,而且免去了輸入密碼的步驟,使用起來更方便(尤其對於sftp,scp等)。
ssh秘鑰的生成和使用,網上很多教程,感覺不太完整,這里自己總結一下。
- 秘鑰由誰生成
這是比較容易搞亂的一點。這里以A、B兩台服務器為例,假設A需要ssh登錄B,那么應該由那台服務器生成秘鑰呢。可能有人以為像門鎖一樣,主人家負責裝鎖配鑰匙,把鑰匙交給要開門的人使用,所以由被訪問的B服務器生成秘鑰。
事實恰恰相反,秘鑰由訪問請求方A服務器生成,並把生成的公鑰交給B導入;公鑰可以在多台服務器導入,一台服務器導入了A的公鑰,即意味着承認A的有訪問自己權限,所以A可以用一套密鑰登錄多台服務器。 - 賬號
訪問和被訪問的服務,需要有相同的賬號,而且密鑰由該賬號生成。 - 密鑰生成
在A服務器上執行命令:
ssh-keygen -t [rsa|dsa]
rsa和dsa是生成密鑰常用的兩種加密算法,其他可選算法還有ecdsa、rsa1等。
命令執行過程需要用戶輸入的地方連續回車即可(enter passphrase的別輸入,否則登錄的時候還是得輸入密鑰密碼)。
執行成功后,在用戶home目錄下的.ssh子目錄里會生成私鑰文件和公鑰文件:id_rsa,id_rsa.pub或id_dsa,id_dsa.pub。 - 公鑰導入
方法一:
把公鑰文件id_rsa.pub上傳到B服務器,然后執行:
cat id_rsa.pub >> ~/.ssh/authorized_keys
將id_rsa.pub的內容,追加到文件~/.ssh/authorized_keys中
方法二:
在A服務器上使用命令cat ~/.ssh/id_rsa.pub查看公鑰內容,將內容復制追加到B服務器的文件~/.ssh/authorized_keys中(請注意不要刪除或覆蓋該文件中已有的內容)。 - 修改權限
A服務器上的.ssh和秘鑰文件的權限在ssh-keygen生成時已設好,無須特別設置。B服務器上如果是首次添加authorized_keys,需要修改權限:
chmod 600 authorized_keys
設置authorized_keys權限
chmod 700 -R .ssh
設置.ssh目錄權限 - 登錄
在A服務器上執行:
ssh ip/hostname(B服務器的ip或主機名)
即可登錄。