我在Atlassian Stash的托管实例中有一个git存储库。然后,我有三台机器:olympus,zeus和hera,它们在其中部署了软件系统的最新版本。为了使它自动化,我想从olitus远程部署到我尝试使用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密钥对。
  • 我已经用其他的对应id_rsa.pub填充了每个azg用户authorized_keys
  • 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.
    

    最佳答案

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

    另外,尽管有些安全专家可能对此并不满意,但我建议仅创建一个密钥对,并在所有计算机上使用它。然后,authorized_keys文件仅需要一行,并且在所有主机上都可以相同。

    :: edit::正如OP在注释中指出的那样,如果您的操作系统坚持使用ssh-agent(建议禁用此选项),则您将需要在所有计算机上运行ssh-add以获得ssh-agent来停止发出警告。

    10-06 01:22