在Ubuntu上設置無密碼SSH登錄的2個簡單步驟

本教程說明了如何設置 無密碼SSH登錄 在Ubuntu桌面上。 基本上有兩種通過OpenSSH服務器驗證用戶登錄身份的方法: 密碼認證基於公鑰的身份驗證。 後者也稱為 無密碼SSH登錄 因為您不必輸入密碼。

設置無密碼SSH登錄的2個簡單步驟

步驟1:在Ubuntu桌面上生成公共/私人密鑰對

在Ubuntu桌面(而不是服務器)上,在終端窗口中輸入以下命令。

ssh-keygen -t rsa

-t 代表類型。 上面的命令生成一個RSA類型的密鑰對。 RSA是默認類型,因此您也可以輸入 ssh-keygen 在終端。 默認情況下,密鑰的長度為2048位,如果您希望更強的安全性,則可以指定一個4096位的密鑰,如下所示。

ssh-keygen -t rsa -b 4096

當詢問您要保存密鑰的文件時,只需按Enter鍵即可選擇默認文件。 接下來,輸入一個至少20個字符長的密碼。 密碼短語用於加密私鑰。 私鑰(您的身份)將保存在 .ssh / id_rsa 在您的主目錄下。 公鑰將保存在 .ssh / id_rsa.pub 文件。

從randomart圖片中,我們可以看到密鑰的長度(RSA 4096)。 如果你看看 ~/.ssh/id_rsa 與文件

head ~/.ssh/id_rsa

您可以看到私鑰已加密,如私鑰文件的前兩行所示。

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED

步驟2:將公鑰上傳到遠程Linux服務器

這很容易做到 ssh-copy-id 命令,由 openssh-client 包。

ssh-copy-id [email protected]

輸入遠程用戶的密碼。 樣本輸出:

/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.

公鑰存儲在 .ssh / authorized_keys 文件位於遠程用戶的主目錄下。 現在SSH到遠程服務器

ssh [email protected]

這次您需要輸入RSA 密碼短語 解鎖私鑰。 您也可以在登錄時選擇自動解鎖密鑰,這樣就不必再輸入密碼了。

ssh私鑰密碼短語

輸入正確的密鑰密碼後,您將登錄到遠程Linux服務器。 現在從遠程服務器退出。

exit

然後再次SSH到遠程服務器:

ssh [email protected]

您可以看到,儘管您沒有鍵入密碼或密鑰密碼,但是您已自動登錄到遠程服務器。 另外,使用時,您無需鍵入密碼或密鑰密碼 scp 傳輸文件的命令。 的 scp 該命令也由 openssh-client 軟件包,默認情況下安裝在Ubuntu桌面上。

禁用密碼認證

儘管默認情況下現在使用SSH密鑰登錄服務器,但是您仍然可以使用普通密碼登錄另一台計算機。 您不希望黑客使用暴力手段入侵您的服務器。

要禁用密碼身份驗證,請編輯 /etc/ssh/sshd_config 文件在遠程服務器上。

sudo nano /etc/ssh/sshd_config

找到這一行:

#PasswordAuthentication yes

更改為:

PasswordAuthentication no

然後找到 ChallengeResponseAuthentication 線。 確保將其值設置為 no 像下面一樣。 如果設置為 yes,您仍然可以使用密碼登錄。

ChallengeResponseAuthentication no

保存文件並重新啟動ssh服務。

sudo service ssh restart

要麼

sudo systemctl restart ssh

現在,如果您沒有相應的私鑰 ~/.ssh 目錄中,當您嘗試ssh到遠程服務器時,將看到以下錯誤。

Permission denied (publickey).

這意味着遠程服務器僅允許使用ssh密鑰進行ssh登錄,而不允許密碼認證。 注意 如果你設置 PasswordAuthenticationnoChallengeResponseAuthenticationyes,那麼您仍然可以使用密碼登錄。 要禁用密碼登錄,必須將兩者都設置為 no

備份公共/私人密鑰對

禁用SSH密碼身份驗證後,備份ssh密鑰非常重要。 如果丟失密鑰,則將被鎖定在服務器之外。 將公共/專用密鑰對備份到安全位置,例如USB驅動器。

cp ~/.ssh/id_rsa* /path/to/safe/location/

您可以將密鑰對複製到新的Linux計算機上,並使用ssh密鑰SSH到服務器中。 將密鑰對複製到新計算機後,需要將密鑰對的所有者更改為新計算機上的用戶。

sudo chown new-user:new-user id_rsa*

然後將它們移到 .ssh/ 新用戶的目錄。

mv id_rsa* ~/.ssh/

現在,您可以使用ssh鍵登錄到新計算機上的遠程服務器。 您還可以將密鑰對存儲在一個文件夾中,然後使用加密方式壓縮該文件夾並將其發送到NextCloud之類的雲存儲。

在SSH代理中存儲密鑰密碼

如果您使用的是僅命令行的Linux計算機,則可能會發現每次ssh進入其他Linux服務器時都需要輸入密鑰密碼。 這是因為ssh代理未存儲您的密鑰密碼。

安裝和配置 鑰匙扣 在SSH客戶端計算機上。

sudo apt install keychain

然後編輯 .bash_profile 要麼 .profile 文件。 在其中添加以下文本,以便每次用戶登錄時都將執行這兩個命令。

/usr/bin/keychain $HOME/.ssh/id_rsa
source $HOME/.keychain/$HOSTNAME-sh

現在註銷並重新登錄。您將看到類似以下內容:

Last login: Thu Dec 17 20:38:39 2015 from 74.125.128.103

* keychain 2.7.1 ~ http://www.funtoo.org
* Found existing ssh-agent: 17651
* Adding 1 ssh key(s): /home/<username>/.ssh/id_rsa
Enter passphrase for /home/<username>/.ssh/id_rsa:
* ssh-add: Identities added: /home/<username>/.ssh/id_rsa

當密鑰鏈啟動時,它將檢查正在運行的ssh-agent,否則將啟動一個。 這次您需要輸入密鑰密碼。 密鑰密碼將在用戶登錄時被記住,但是當系統重啟時,您必須再次輸入。

現在,只要ssh服務器具有公用密鑰,並且您正在使用的ssh客戶端現在具有成功配置的私有/公共密鑰對和密鑰鏈,就可以將ssh放入ssh服務器,而無需鍵入密鑰密碼。

更改私鑰密碼

如果您需要更改私鑰密碼,可以使用以下命令進行更改:

ssh-keygen -f ~/.ssh/id_rsa -p

輸入您的舊密碼,然後輸入新密碼。

下一步

我希望本教程可以幫助您在Ubuntu上設置無密碼ssh登錄。 您可能還需要設置自動安全更新。

  • 在Ubuntu上設置自動安全更新(無人值守升級)

與往常一樣,如果您發現這篇文章很有用,請訂閱我們的免費新聞通訊以獲取更多提示和技巧。 照顧自己。

Sidebar