为ruby系统调用运行eval ssh-agent

时间:2015-12-29 14:56:34

标签: ruby-on-rails ruby linux ssh

我正在尝试使用rails为用户输入的电子邮件ID生成一个ssh密钥。

在操作中,我使用system()调用运行了执行此过程所需的所有命令。

本地在Ubuntu 14.04上,一切似乎都运行正常。但是在AWS上的Ubuntu Server 14.04上,密钥生成成功但在ssh-add上失败。

问题:

在我的本地系统上,ssh-agent一直在运行,但在服务器上,它永远不会自动为每个shell会话启动。这就是ssh-add在服务器上失败的原因。

为此,我在服务器的.bash_profile文件中添加了一些代码,这些代码会在每个会话中启动ssh-agent。现在,ssh-agent每次通过ssh与服务器建立会话时都会运行,但它不会为ruby的system()调用运行。

我在做:

system('ssh-add id_rsa')

表示Could not open a connection to your authentication agent 。所以,我接下来要做的就是:

system('eval "$(ssh-agent -s)" & ssh-add id_rsa')

但仍然无法解决问题。

我不知道为什么在本地我不需要手动启动ssh-agent并且所有代码都运行没有任何问题。如何使ssh-agent正常工作,因为它正在我的本地系统上工作。

我希望能够使用ssh-add some-key添加新生成的ssh密钥,并使其持久化,以便以后如果我重新启动服务器,我不必再添加它。我正在使用rails方法执行所有这些操作,该方法使用system()调用发出所有命令。

非常感谢帮助。感谢。

1 个答案:

答案 0 :(得分:1)

  

我想克隆并从一个人的git存储库中提取代码,这可能是私有的,在这种情况下我生成一对ssh密钥并使用API​​将公钥添加到该人的github帐户。

     

这就像服务器将通过为所有人创建ssh密钥并将公钥添加到他们的帐户中来访问5-10人的私有github存储库。示例:http://gist.github.com/jexchan/2351996

要使用git访问远程存储库,您不需要ssh-agent。指定ssh_config中的键,例如

Host github.com-user1
  HostName github.com
  IdentityFile ~/.ssh/id_rsa_user1

然后使用以下方法克隆:

git clone git@github.com-user1:user1/whatever.git whatever

以同样的方式工作。但请确保配置文件可以访问。

同样使用ssh-agent不会扩展,因为代理提供了他拥有的所有密钥,而不管用户(在链接示例中)。如果你在~5个存储库中长大,你会看到身份验证失败。