SSH(Secure Shell)預設需使用SSH伺服器端的帳號密碼來登入該台伺服器,只不過若每次都需要重新輸入帳號密碼,實在是一件很麻煩的事情。除了帳號密碼的權限驗證方式外,SSH另外提供了金鑰的權限驗證方式,讓SSH伺服器端能夠使用信任的客戶端自行產生獨特的金鑰號碼,來登入SSH伺服器,這樣一來SSH伺服器端就不需要提供給客戶端任何的帳號密碼了。



將SSH金鑰加入SSH伺服器

首先,SSH客戶端必須要擁有獨特的SSH金鑰,Linux系統產生SSH金鑰的方法可以參考這篇文章的作法。客戶端有了SSH的金鑰後,便可將SSH的公開金鑰(.pub檔案)交給SSH伺服器來儲存使用。

如何將SSH的公開金鑰交給SSH伺服器?

將SSH的公開金鑰交給SSH伺服器最簡單的作法就是使用「ssh-copy-id」指令,直接將公鑰複製給連線的SSH伺服器。指令用法和「ssh」指令差不多,如下:

ssh-copy-id username@hostname

username是遠端裝置的登入帳號,hostname是遠端裝置的網路位址(網址或是IP)。

例如:

ssh-copy-id magiclen@192.168.1.103

接著再輸入遠端裝置的帳號登入密碼,完成登入後,便可以將公鑰傳送給遠端的SSH伺服器來儲存。

之後再使用「ssh」指令登入該裝置的帳號的話,就不必再帳號登入輸入密碼了!

SSH客戶端的公鑰預設會存在SSH伺服器端該帳號底下家目錄中的「.ssh」目錄裡的「authorized_keys」檔案,使用純文字格式來儲存,每一行文字就是代表著一組SSH客戶端的公鑰。也就是說,就算SSH客戶端不使用「ssh-copy-id」指令先使用帳號密碼登入SSH伺服器提供公鑰,SSH伺服器端也可以直接修改這個檔案,手動將SSH客戶端的公鑰添加進去,這樣一來SSH伺服器端就完全不用提供任何帳號的密碼給SSH客戶端登入了,安全性也會相對提升!當然,這個公鑰必須要保護好,不能讓其他人拿到。

停用SSH伺服器的帳號密碼驗證

用了金鑰驗證後,就可以把SSH的帳號密碼驗證給關閉掉,使其只允許金鑰驗證,避免暴力破解密碼的攻擊。

要開啟或是關閉SSH伺服器的帳號密碼驗證,可以修改「/etc/ssh/sshd_config」檔案,將「PasswordAuthentication」改為「no」(如果要開關金鑰驗證,要修改「PubkeyAuthentication」)。可以使用類似以下的指令來用文字編輯器開啟「/etc/ssh/sshd_config」檔案:

sudo gedit /etc/ssh/sshd_config

修改完成後,再使用以下指令重啟SSH,就可以套用設定了。

sudo service ssh restart