我正在设置一个持续集成 (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 服务器所需操作的简要概述:
- 在 CI 服务器上创建公钥/私钥对
- 将密钥的公共部分 (
id_rsa.pub
) 复制到 Web 服务器上~/.ssh/authroized_keys
您要以之登录的每个用户的文件中(root
等user
)。我通常只使用scp
将文件复制到服务器。如果您有多个密钥要用于每个用户,请将它们附加到authorized_keys
。否则,如果这是该用户的唯一密钥,您可以将其重命名id_rsa.pub
为authorized_keys
。 - 确保
.ssh
文件夹的权限为 644,chmod 644 .ssh
并且授权密钥文件的权限为 700chmod 700 .ssh/authorized_keys
。 - 尝试使用已将公钥复制到 Web 服务器上的用户名从 CI 服务器登录 Web 服务器,例如
ssh user@webserver
它不应该要求输入密码(这是假设您已经遵循了@khaled 关于 sshd 配置文件的建议,但默认设置通常设置为允许在密码之前进行密钥验证)。