Linux

如何使用公鑰認證在伺服器之間建立 ssh 連接

  • April 11, 2012

我正在設置一個連續集成(CI)伺服器和一個測試 Web 伺服器。我希望 CI 伺服器能夠通過公鑰身份驗證訪問 Web 伺服器。在 Web 伺服器中,我創建了一個使用者並生成了密鑰

sudo useradd -d /var/www/user -m user
sudo passwd user
sudo su user
ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/var/www/user/.ssh/id_rsa):
Created directory '/var/www/user/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /var/www/user/.ssh/id_rsa.
Your public key has been saved in /var/www/user/.ssh/id_rsa.pub.

但是另一方面,CI伺服器將密鑰複製到主機但仍然詢問密碼

ssh-copy-id -i ~/.ssh/id_rsa.pub user@webserver-address
user@webserver-address's password:
Now try logging into the machine, with "ssh 'user@webserver-address'", and check in:

.ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

我檢查了 Web 伺服器,CI 伺服器公鑰已復製到 Web 伺服器 authorized_keys 但是當我連接時,它會詢問密碼。

 ssh 'user@webserver-address'
 user@webserver-address's password:

如果我嘗試使用 root 使用者而不是我創建的使用者(兩個使用者都使用複制的公鑰)。它與公鑰連接

 ssh 'root@webserver-address'
 Welcome to Ubuntu 11.04 (GNU/Linux 2.6.18-274.7.1.el5.028stab095.1 x86_64)

  * Documentation:  https://help.ubuntu.com/
 Last login: Wed Apr 11 10:21:13 2012 from *******
 root@webserver-address:~#

您的問題說您想從 CI 伺服器登錄到網路伺服器。但是你說你在網路伺服器上創建了密鑰。我不確定這只是一個誤解還是一個錯誤的類型。

下面簡要概述了使用密鑰從 CI 伺服器啟用登錄到 Web 伺服器所需的操作:

  1. 在 CI 伺服器上創建公鑰/私鑰對
  2. 將密鑰 ( ) 的公共部分複製id_rsa.pub到網路伺服器上,並將其複製到~/.ssh/authroized_keys您要以 ( 等) 身份登錄的每個使用者的文件rootuser。我通常只是scp用來將文件複製到伺服器上。如果您有多個要用於每個使用者的密鑰,請將它們附加到authorized_keys. 否則,如果這是該使用者的唯一鍵,您只需重命名id_rsa.pubauthorized_keys.
  3. 確保.ssh文件夾的權限為 644chmod 644 .ssh和授權密鑰文件的權限為 700 和chmod 700 .ssh/authorized_keys.
  4. 嘗試使用您已將公鑰複製到網路伺服器上的使用者名從 CI 伺服器登錄網路伺服器,例如ssh user@webserver

它不應該要求輸入密碼(這是假設您已遵循@khaled 關於 sshd 配置文件的建議,但預設設置通常設置為允許在密碼之前進行密鑰身份驗證)。

引用自:https://serverfault.com/questions/378375