我正在尝试使用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()
调用发出所有命令。
非常感谢帮助。感谢。
答案 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个存储库中长大,你会看到身份验证失败。