也许是一种非常不寻常的情况,但是我想指定一个从本地计算机执行 shell(git)命令时要使用的专用 SSH 密钥。
基本上是这样的:
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 使用指定私钥连接到远程服务器的示例,但这是本地命令。可能吗?
Host gitserv
Hostname remote.server.com
IdentityFile ~/.ssh/id_rsa.github
IdentitiesOnly yes # see NOTES below
git remote add origin git@gitserv:myrepo.git
git push -v origin master
ssh-agent bash -c 'ssh-add /somewhere/yourkey; git clone git@github.com:user/project.git'
ssh-agent $(ssh-add /somewhere/yourkey; git clone git@github.com:user/project.git)
Host github.com
IdentityFile ~/.ssh/github_rsa
GIT_SSH_COMMAND='ssh -i private_key_file' git clone user@host:repo.git
#!/bin/bash
ssh -i /path/to/ssh/secret/key $1 $2
GIT_SSH=my_git_ssh_wrapper git clone git@github.com:TheUser/TheProject.git
总结答案和评论 ,这是设置 git 以便使用不同的密钥文件然后忘记它的最佳方法,该方法还支持同一主机的不同用户(例如,个人 GitHub 帐户和一个工作帐户),该帐户可在 Windows 上使用同样,是编辑~/.ssh/config
(或c:\Users\<your user>\.ssh\config
~/.ssh/config
c:\Users\<your user>\.ssh\config
)并指定多个标识:
Host github.com
HostName github.com
IdentityFile /path/to/your/personal/github/private/key
User dandv
Host github-work
HostName github.com
IdentityFile /path/to/your/work/github/private/key
User workuser
然后,要以个人用户身份克隆项目,只需运行常规的git clone
命令。
要将回购克隆为工作workuser
,请运行git clone git@github-work:company/project.git
。
使用 git 2.10+(2016 年第三季度:2016 年 9 月 2d 发布),您可以为GIT_SSH_COMMAND
设置配置 (而不仅仅是Rober Jack Will的答案中描述的环境变量)
参见NguyễnTháiNgọcDuy( pclouds
)的 commit 3c8ede3 (2016 年 6 月 26 日) 。
(由Junio C gitster
- gitster
在commit dc21164 中合并 ,2016 年 7 月 19 日)
添加了新的配置变量
core.sshCommand
以指定每个存储库使用的GIT_SSH_COMMAND
值。
core.sshCommand:
如果设置了此变量,则当
git fetch
和git push
需要连接到远程系统时,它们将使用指定的命令而不是ssh
。
该命令与GIT_SSH_COMMAND
环境变量的格式相同,并且在GIT_SSH_COMMAND
环境变量GIT_SSH_COMMAND
被覆盖。
这意味着git clone
可以是:
cd /path/to/my/repo
git config core.sshCommand 'ssh -i private_key_file'
# later on
git clone host:repo.git
您甚至可以只用一个命令设置它:
git -c core.sshCommand="ssh -i private_key_file" clone host:repo.git
这比设置GIT_SSH_COMMAND
环境变量要容易得多,正如MátyásKuti-Kreszács 指出的那样 ,在 Windows 上将其设置为
set "GIT_SSH_COMMAND=ssh -i private_key_file"
如此处所述: https : //superuser.com/a/912281/607049
您可以按仓库配置它:
git config core.sshCommand "ssh -i ~/.ssh/id_rsa_example -F /dev/null"
git pull
git push
更好的办法是将该主机或 IP 添加到.ssh/config
文件,如下所示:
Host (a space separated list of made up aliases you want to use for the host)
User git
Hostname (ip or hostname of git server)
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_(the key you want for this repo)
GIT_SSH_COMMAND="ssh -i /path/to/git-private-access-key" git clone $git_repo