如何使用公钥authentication在服务器之间build立ssh连接

我正在build立连续集成(CI)服务器和testingWeb服务器。 我想CI服务器将访问公钥authentication的Web服务器。 在Web服务器中,我创build了一个用户并生成了密钥

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用户而不是我创build的用户(两个用户都使用复制的公钥)。 它与公钥连接

  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服务器login到networking服务器。 但是你然后说你在networking服务器上创build了密钥。 我不确定这是误解还是错误。

下面简要介绍一下你需要做什么来使用密钥从CI服务器login到networking服务器:

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

它不应该要求一个密码(这是假设你已经按照@ khaled关于sshdconfiguration文件的build议,但默认情况下通常设置为允许密码之前的密钥authentication)。