执行shell命令时使用的键?
也许是一种相当不寻常的情况,但我想指定一个私有SSH密钥,以便在本地计算机上执行shell(git)命令时使用。
基本如此:
git clone git@github.com:TheUser/TheProject.git -key "/home/christoffer/ssh_keys/theuser"
或者甚至更好(在Ruby中):
with_key("/home/christoffer/ssh_keys/theuser") do
sh("git clone git@github.com:TheUser/TheProject.git")
end
我已经看到使用Net :: SSH连接到远程服务器的示例,它使用指定的私钥,但这是本地命令。 可能吗?
像这样的东西应该可以工作(由orip建议):
ssh-agent bash -c 'ssh-add /somewhere/yourkey; git clone git@github.com:user/project.git'
如果你喜欢subshell,你可以尝试以下(虽然它更脆弱):
ssh-agent $(ssh-add /somewhere/yourkey; git clone git@github.com:user/project.git)
Git将调用SSH,它将通过环境变量找到它的代理; 这将反过来加载密钥。
或者,如果您愿意将仅包含.ssh
目录的目录设置为HOME
,则设置HOME
也可以实现这一诀窍: 这可能包含identity.pub或配置文件设置IdentityFile。
这些解决方案都不适合我。
相反,我详细说明了@Martin v。Löwis提到的为SSH设置config
文件。
SSH将查找用户的~/.ssh/config
文件。 我有我的设置为:
Host gitserv
Hostname remote.server.com
IdentityFile ~/.ssh/id_rsa.github
IdentitiesOnly yes # see NOTES below
我添加一个远程git仓库:
git remote add origin git@gitserv:myrepo.git
然后git命令对我来说正常工作。
git push -v origin master
笔记
IdentitiesOnly yes
必需的,以防止发送与每个协议的默认文件名匹配的标识文件的SSH默认行为。 如果你有一个名为~/.ssh/id_rsa
的文件,在你的~/.ssh/id_rsa.github
没有这个选项的情况下会试一下。 参考
其他人对~/.ssh/config
的建议是非常复杂的。 它可以像下面这样简单:
Host github.com
IdentityFile ~/.ssh/github_rsa
链接地址: http://www.djcxy.com/p/4313.html
上一篇: key to use when executing shell command?
下一篇: How do I get the current absolute URL in Ruby on Rails?