最近由於項目快要上線了,服務器從測試環境轉到了生產環境,登陸方式也從原來的密碼認證替換成了密鑰認證。vim
這麼作的目的是爲了防止服務器密碼被暴力破解。服務器
ssh 是什麼?
ssh 是一種協議,它能夠基於密碼進行認證,也能夠基於密鑰去認證用戶。ssh
這裏咱們使用 RSA
類型的加密類型來建立密鑰對。測試
ssh-keygen -f ~/.ssh/your_key_name
-f
參數表示指定密鑰對生成位置與名稱$HOME/.ssh
目錄下建立成功以後,能夠看到 .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>
不出意外,就能夠不用輸入密碼而直接成功登陸了。
若是你仍然須要輸入密碼或者遇到其餘問題了,能夠從如下方向進行排查。
-i
參數,指定對應密鑰的名稱。不然因爲默認私鑰與遠程主機中的自定義公鑰不匹配,天然沒法基於密鑰進行認證,會再次提示你輸入密碼。$HOME/.ssh
目錄的正常權限是700,服務端$HOME/.ssh/authorized_keys
文件的權限默認爲600。上面的命令雖然能夠實現免密登陸,可是命令太長了,就算是複製粘貼也有可能會出錯。
那有沒有什麼好的辦法,解決這個問題呢?
固然是有的啦。
在$HOME/.ssh
目錄下,建立一個名爲config
的文件。
vim $HOME/.ssh/conifg
加入如下配置:
Host alias User user HostName ip address Port port IdentityFile ~/.ssh/your_key ServerAliveInterval 360
參數說明:
ssh alias
進行登陸。固然,若是你是使用ssh 客戶端
,那就不用配置這些。
若是上面的配置都無誤,能夠正常經過密鑰進行免密登陸,那麼最後須要作的一件事情就是關閉服務端的經過密碼進行身份認證。
vim /etc/ssh/sshd_config # 將yes 改成 no PasswordAuthentication yes
而後重啓 sshd 服務。
service sshd restart
以上就是有關如何用自定義的密鑰對進行免密認證的所有過程了。