1

我在 Atlassian Stash 的托管实例中有一个 git 存储库。然后我有三台机器:olympus、zeus 和 hera,我在其中部署了最新版本的软件系统。为了自动化这一点,我想从 olympus 远程部署到我尝试使用的其他机器上sshgit pull但这失败了Permission denied (publickey).。我基本上这样做并得到:

azg@olympus:~$ ssh azg@zeus 'cd ~/my/project/release/deploy/location/; git pull'
Permission denied (publickey).
fatal: The remote end hung up unexpectedly

我有以下内容:

  • 每台机器都有不同的 azg 用户(没有时间安装 LDAP 等),所以我有 azg@olympus、azg@zeus 和 azg@hera。我为每个用户生成了 ssh id_rsa 密钥对。
  • 我已经authorized_keys用其他人的相应 id_rsa.pub填充了每个 azg 用户
  • Stash azg 用户为每个 azg 用户(azg@olympus、azg@zeus、azg@hera)配置了所有 id_rsa.pub 的副本,因此我可以通过 ssh 从每台机器克隆、拉取或推送,而无需每次都输入密码. 因此我不能做任何问题:

    azg@olympus:~/code$ git clone ssh://azg@olympus:7999/pm/pm.git
    Cloning into 'pm'...        
    remote: Counting objects: 555, done.
    remote: Compressing objects: 100% (271/271), done.
    remote: Total 555 (delta 203), reused 555 (delta 203)
    Receiving objects: 100% (555/555), 9.54 MiB, done.
    Resolving deltas: 100% (203/203), done.
    

我可以分别从每台机器上做同样的事情。但是,如果我首先远程登录,即每次都询问我密钥“/home/azg/.ssh/id_rsa”的密码短语,我就无法做到这一点,例如

azg@olympus:~$ ssh azg@zeus
Welcome to Ubuntu 12.04.3 LTS (GNU/Linux 3.5.0-43-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

Last login: Wed Nov 27 17:01:33 2013 from olympus
azg@zeus:~$ cdc
azg@zeus:~/code$ git clone ssh://azg@olympus:7999/pm/pm.git
Cloning into 'pm'...
Enter passphrase for key '/home/azg/.ssh/id_rsa':  <<<<<<<<<<< WHY???
remote: Counting objects: 555, done.
remote: Compressing objects: 100% (271/271), done.
remote: Total 555 (delta 203), reused 555 (delta 203)
Receiving objects: 100% (555/555), 9.54 MiB | 145 KiB/s, done.
Resolving deltas: 100% (203/203), done.
4

1 回答 1

2

听起来您使用密码在 Zeus 上创建了 RSA 密钥对。(这与帐户密码不同;它是解密密钥文件本身的密码。)考虑重新生成密钥对,并确保在ssh-keygen要求输入密码时不输入任何内容。

此外,尽管一些安全专家可能不赞成这种做法,但我建议只创建一个密钥对并在所有机器上使用它。然后该authorized_keys文件只需要一行,并且在所有主机上都可以相同。

::edit:: 正如OP在评论中指出的那样,如果您的操作系统坚持让您背负ssh-agent(我建议禁用),您将需要ssh-add在所有机器上运行ssh-agent才能停止发出警告。

于 2013-11-27T16:09:48.607 回答