git免密pull指定ssh密钥文件
免密登陆其他机器、获取资源一直是一种非常高效、高度自动化、智能化的方式。技术爱好者不可不知,且最好知行合一。
1、多机共用密钥
在部署时总是希望被部署的服务器上可以免密码执行clone、pull等只读操作。
从不用手动输密码到自动更新。能省多少心啊。。。。:)
当然自动部署可以用github、gitee的post hook功能,也可以用操作系统的定时任务实现。此处不加讨论。
本文着重点在于git pull git@ssh_repo_path时如何指定特定的密钥文件。
因为直接执行pull git@ssh_repo_path是会从~/.ssh/id_rsa读取密钥的。如何指定特定的密钥呢?
为啥要指定特定的密钥啊。。。。。。因为如果我把密钥都做了备份拷贝,那么换一台机器,直接使用相应的密钥就行了,不需要再重新生成密钥、公钥,然后将公钥添加到github等项目中。能省很多事嘞。。。。。
2、思路
- 利用git的 SSH_COMMAND环境变量来指定特定密钥。
来一段windows下的cmd脚本
set rsa_path=operation/keygen/id_rsa
git config core.sshCommand "ssh -i %rsa_path% "
git pull git@gitee.com:your_repo.git
这段脚本首先设定密钥的相对路径(相对于git根目录)。然后设置SSH_COMMAND环境变量。然后执行git pull ssh_repo_path指令去更新本地目录。
本人采用的就是此种方式。另外statckoverflow上还有一些别的思路附后。本人没有验证,有兴趣童鞋可以研究其原理并尝试下。
3、其他方式
- ssh-agent sh -c ‘ssh-add ~/.ssh/id_rsa; git fetch user@host’
GIT_SSH_COMMAND
GIT_SSH_COMMAND=’ssh -i ~/.ssh/id_rsa -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no’ \
git clone user@host~/.ssh/config
Host github.com
User git
Hostname github.com
IdentityFile ~/.ssh/id_rsa