Linux 如何生成密鑰對進行 ssh 免密登陸

最近由於項目快要上線了,服務器從測試環境轉到了生產環境,登陸方式也從原來的密碼認證替換成了密鑰認證。vim

這麼作的目的是爲了防止服務器密碼被暴力破解。服務器

ssh 是什麼?

ssh 是一種協議,它能夠基於密碼進行認證,也能夠基於密鑰去認證用戶。ssh

生成密鑰對

這裏咱們使用 RSA 類型的加密類型來建立密鑰對。測試

ssh-keygen -f ~/.ssh/your_key_name
  1. -f 參數表示指定密鑰對生成位置與名稱
  2. 密鑰對一般放在 $HOME/.ssh 目錄下
  3. 回車便可建立密鑰對,若是不須要爲密鑰對進行加密,那麼能夠一路回車。

建立成功以後,能夠看到 .ssh 目錄下多了兩個文件,分別是:加密

  • your_key:密鑰對的私鑰,一般放在客戶端。
  • your_key.pub:密鑰對中的公鑰,一般放在服務端。

將本地的公鑰傳到服務器上

注意:這裏是將your_key.pub 公鑰文件上傳至你須要鏈接的服務器,而不是your_key私鑰文件。spa

ssh-copy-id -i ~/.ssh/your_key.pub user@<ip address> -pport

-i 參數表示使用指定的密鑰,-p參數表示指定端口,ssh 的默認端口是 22,若是沒有更改默認端口,則能夠省略。rest

這裏須要輸入一次密碼進行確認,若是成功以後,會看到如下內容:code

本地的公鑰文件上傳在服務器的哪裏?

在該用戶的.ssh/authorized_keys 文件中。blog

cat ~/.ssh/authorized_keys

經過密鑰對進行免密登陸

如今咱們可使用如下命令登陸到服務器中了:ip

ssh -p port -i ~/.ssh/your_key user@<ip address>

不出意外,就能夠不用輸入密碼而直接成功登陸了。

若是你仍然須要輸入密碼或者遇到其餘問題了,能夠從如下方向進行排查。

常見問題:

  1. 若是沒有使用默認的密鑰名稱(id_rsa),則在鏈接主機時須要加上-i 參數,指定對應密鑰的名稱。不然因爲默認私鑰與遠程主機中的自定義公鑰不匹配,天然沒法基於密鑰進行認證,會再次提示你輸入密碼。
  2. 服務端的$HOME/.ssh目錄的正常權限是700,服務端$HOME/.ssh/authorized_keys文件的權限默認爲600。
  3. 上傳密鑰時使用的是:公鑰(.pub),進行密鑰認證時使用的是:私鑰。

配置ssh config

上面的命令雖然能夠實現免密登陸,可是命令太長了,就算是複製粘貼也有可能會出錯。

那有沒有什麼好的辦法,解決這個問題呢?

固然是有的啦。

$HOME/.ssh 目錄下,建立一個名爲config的文件。

vim $HOME/.ssh/conifg

加入如下配置:

Host alias
    User user
    HostName ip address
    Port port
    IdentityFile ~/.ssh/your_key
    ServerAliveInterval 360

參數說明:

  • Host:能夠理解成別名,配置完成以後,最後就經過 ssh alias 進行登陸。
  • User:遠程主機的用戶名稱
  • HostName:遠程主機的地址
  • Port:端口號
  • IdentityFile:私鑰文件的路徑
  • ServerAliveInterval:保持客戶端與服務端會話在短期內不會斷開。

固然,若是你是使用ssh 客戶端,那就不用配置這些。

禁用經過密碼認證

若是上面的配置都無誤,能夠正常經過密鑰進行免密登陸,那麼最後須要作的一件事情就是關閉服務端的經過密碼進行身份認證。

vim /etc/ssh/sshd_config

# 將yes 改成 no
PasswordAuthentication yes

而後重啓 sshd 服務。

service sshd restart

以上就是有關如何用自定義的密鑰對進行免密認證的所有過程了。

相關文章
相關標籤/搜索