如何使用公钥认证在服务器之间建立 ssh 连接

如何使用公钥认证在服务器之间建立 ssh 连接

我正在设置一个持续集成 (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:~#

答案1

您的问题说您想从 CI 服务器登录到 Web 服务器。但您随后又说您在 Web 服务器上创建了密钥。我不确定这是否只是误解或输入错误。

以下是使用密钥从 CI 服务器登录 Web 服务器所需操作的简要概述:

  1. 在 CI 服务器上创建公钥/私钥对
  2. 将密钥的公共部分 ( id_rsa.pub) 复制到 Web 服务器上~/.ssh/authroized_keys您要以之登录的每个用户的文件中(rootuser)。我通常只使用scp将文件复制到服务器。如果您有多个密钥要用于每个用户,请将它们附加到authorized_keys。否则,如果这是该用户的唯一密钥,您可以将其重命名id_rsa.pubauthorized_keys
  3. 确保.ssh文件夹的权限为 644,chmod 644 .ssh并且授权密钥文件的权限为 700 chmod 700 .ssh/authorized_keys
  4. 尝试使用已将公钥复制到 Web 服务器上的用户名从 CI 服务器登录 Web 服务器,例如ssh user@webserver

它不应该要求输入密码(这是假设您已经遵循了@khaled 关于 sshd 配置文件的建议,但默认设置通常设置为允许在密码之前进行密钥验证)。

相关内容