背景
密钥方式鉴权远比使用固定密码登录要安全,但是在合作项目中,我们希望保留自己的密钥,但又希望private项目能以密钥的方式鉴权。一个具体的场景是,用户A已经配置了.ssh/config
中针对github.com
的密钥。但是在另一台公共机器上,希望能够pull/push操作一个private仓库。此时这台机器(1)没有用户A的密钥;(2)没有在.ssh/config
配置github.com的ssh鉴权方式,故ssh -T git@github.com
不成功。我们希望做到:用户A在公共机器上使用密钥访问项目,且该密钥与A自己其他项目是隔离的。
步骤
1. 生成密钥导入github
使用ssh-keygen
创建密钥,并在https://github.com/
你的用户名/你的某个Private仓
库/settings/keys
中导入到Deploy keys
,注意需要push的话记得勾选write
权限。
注意密钥文件不要覆盖~/.ssh/id_rsa
,可以以仓库名命名。
2. 绑定本地host别名与repo地址
编辑~/.ssh/config
,
Host github.com-repo-你的仓库名
Hostname github.com
IdentityFile=/home/你的linux用户名/.ssh/你前面生成的密钥名
测试一下,shell执行git clone
git@github.com-repo-你的仓库名:你的Github
用户名/
你的Github
仓库名.git
能clone表示成功。
3. 切换本地git项目的remote地址
切换到本地仓库目录下,将本地项目与github上的private项目关联:
新项目,直接添加关联:
git remote add origin git@github.com-repo-你的仓库名:你的Github用户名/你的Github仓库名.git
如果关联过,需要重新关联:
git remote set-url origin
git@github.com-repo-你的仓库名:你的Github
用户名/
你的Github
仓库名.git
4. 完成
尝试git push
,没问题。
留言