前言
现在的代码托管网站很多如coding, github,码云等. 由于各种原因我们常常需要从同一台电脑同步不同站点的代码等资源. 你可以选择使用http/https的方式下载代码,但是这种方式不利于资源的同步, 所以一般我们选择SSH方式. 而SSH工具一般跟git命令行工具进行了集成,所以只要安装git命令行工具,如git bash就可以实现从多个站点来同步资源. 下面我们看一下具体步骤
先决条件
- 我们这里演示用同一个电脑从
coding和github两个托管网站上同步代码, 所以需要先从这两个网站上注册账号, 假如分别是a@coding.net,b@github.com. 当然, 如果已有账号可以跳过此步. - 安装git bash工具. 从网上下载git bash安装即可.
生成公钥和私钥
在与远程仓库同步时,为了避免每次都输入密码,我们借助ssh工具来生成密钥对,即公钥和私钥. 公钥需要注册到远程仓库, 私钥自己保留. 那怎么生成公钥和私钥呢? 很简单
- 打开git bash 输入以下命令定位到ssh的home目录,一般在
~/.ssh
cd ~/.ssh
- 分别为两个账号创建密钥对, 以
a@coding.net为例,b@github.com的过程完全一样
ssh-keygen -t rsa -C a@coding.net -f id_rsa_coding
ssh-keygen 就是密钥对的生成工具, 它有以下几个常用命令:
- -t: 加密类型, 比如 rsa
- -C: 备注,为了方便维护,这里我们把账户名作为备注信息
- -f: 密钥对的文件名.
然后会提示你输入密码, 直接两次回车即可. 以上命令正常结束后会生成两个密钥文件,文件后缀为pub的存储公钥,另外一个存储私钥:
id_rsa_coding // 私钥 自己保存
id_rsa_coding.pub // 公钥 需要注册到远程仓库
- 将公钥注册到远程仓库
在git bash命令行中输入
cat id_rsa_coding.pub可以查看其中的内容,类似如下格式
ssh-rsa AAAAC2NzaC1yc2EAAAADAQABAAABAQDfwqZmxxGNb3m3/OHMlsneia7eVKtvSz45j4igha2uBSHqxavACHqy6/Ep10SAooQoffmD4fncs9whKy0LNnoWtTckbH1SZUlWniEU7RYmGeTIGRUPdXU0VG6O3UNysBZOAW91DmqNaOq74Yc20zT++C1uSHQDPnk9mpiXwTwhaopiRUGvxXaoVzvX/58OSESLyFwKdZXaZZP320QWUzpF1n6PFweuBg8pcSAFKe9cNjg2j6gIceSZEYn3ETzG76XbixHic0orE6gl5dQCYFl5pbKBbLb2BX701+IfKv4aoxN1BxXJj54aaNcXy7r+csZk9+hEAcHID3DMI/4cU/mz coding.net
使用你注册coding.net账号 a@coding.net登录coding.net, 然后在设置中找到ssh key相关的界面,把上面的内容全部粘贴过去即可完成注册.
- 将私钥添加到ssh-agent 注册成功以后, 就差最后一步,将私钥添加到ssh-agent
首先启动 ssh-agent
eval `ssh-agent -s`
然后将私钥添加到agent进程
ssh-add ~\.ssh\id_rsa_coding
这样即可正常使用git 命令来同步资源了.
当第一次使用使用git clone下载代码时, ssh会自动生成known_hosts文件.
- 添加配置文件(可选)
因为我们添加了多个账号到 ssh-agent中,有时会出现warning,此时你可以在ssh home目录下手动创建一个名为
config的文件,然后把下面的信息复制进去
# coding.net
Host git.dev.tencent.com
PubkeyAuthentication yes
IdentityFile ~/.ssh/id_rsa_coding
# github
Host github.com
PubkeyAuthentication yes
IdentityFile ~/.ssh/id_rsa_github
上面的配置很简单,分为两个部分,每部分配置一个站点. 核心就是为每个托管站点指定私钥文件即 IdentityFile ~/.ssh/id_rsa_coding 和IdentityFile ~/.ssh/id_rsa_github.
Host表示托管站点的首页地址. 比如你的repo url是https://github.com/zhangsan/spring-cloud-config.git, 那么就配置Host为git.com
如果Host配置错误会导致
git@github.com: Permission denied (publickey). fatal: Could not read from remote repository. 错误
这样使用起来就更加清爽了
总结
总的来说过程很简单, 首先你要在代码托管网站上注册合法账号,然后使用ssh-keygen 命令生成对应的密钥对,然后将公钥注册到托管网站,将私钥添加到ssh-agent进程中. 多个账号重复上述过程即可.