使用SSH与远程仓库进行连接

160 阅读2分钟

背景介绍

  • 克隆项目到本地一般有两种方式 https / ssh
  • 前者每次与远程仓库进行通信时,都会需要输入用户名和密码,这是因为github采用了双重验证来保证安全。当然,也可以使用credential.helper(凭证助手)来记住Username和Password,避免繁琐的输入。
  • 后者在客户端生成密钥时,可以通过不输入密码进行overwrite使得密码置空,达到不需要重复输入密码的目的。

配置过程

  1. 首先,使用命令在本地生成SSH密钥:私钥-公钥。
# -C后接邮箱地址,例:-C "aaa@qq.com"
# -f后接生成密钥的路径(同时包含了密钥的文件名),这样就不用在生成时单独输入密钥文件名
# 不同的密钥文件名要区分不同文件名,以下是GitHub的ssh密钥示例
#当客户端需要与多个远程仓库进行SSH连接,使用这个命令生成不同的密钥就会很方便
ssh-keygen -t rsa -C "<GitHub邮箱>" -f ~/.ssh/id_rsa_github


 
# 这之后直接回车就行了,如果你手贱设置了密码,那么之后你每次push、pull都要为此付出代价(什么代价?用脚趾头都能猜到吧!)
  1. 查看系统中.ssh文件夹,会发现私钥id_rsa_github文件以及与之对应的公钥文件id_rsa_github.pub,密钥生成成功!

  2. 查看.ssh文件夹下的config文件,没有就新建一个。

cat config
  1. 编辑config文件夹,格式如下:

# config文件插入以下内容,多个账号可以配置多组,中间建议间隔一行
# Host 为使用ssh时的别名,在之后配置仓库远程地址时用到
# HostName 为远程仓库的域名
# Port 地址域名,有时候会用到,具体看域名后面跟不跟域名
# User 一般为git,了解到好像填其他的也没太大影响
# IdentityFile 为生成的对应的ssh密钥文件
# UseKeychain 是使用 Mac OS 的 钥匙串来管理密钥
# AddKeysToAgent 是将密钥加入到 Agent,ssh-agent 是一个跑在后台的帮你缓存key passphrase的进程 

Host gitlab
  HostName git.ah
  User wuqinghe
  AddKeysToAgent yes
  UseKeychain yes
  Port 2222
  IdentityFile ~/.ssh/id_rsa

Host github
  HostName github.com
  User picasuo
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_rsa_github

  1. 接下来复制id_rsa.pub公钥,在远程仓库中添加SSH公钥

  2. 最后测试SSH链接是否成功

ssh -T git@github
# 这里-T后面接上的就是之前config文件中的Host别名


# 如果看到以下内容,说明你已经成功了
# Hi <你的GitHub账户名>! You've successfully authenticated, but GitHub does not provide shell access.
  1. 配置仓库远程地址,但是一般来说,git clone的时候已经自动帮你把这一步做了。
# 原来配置远程仓库地址时我们使用https地址
git remote add origin https://github.com/<你的GitHub账户名称>/<你的仓库名称>.git
 
# 现在我们使用config文件中的Host别名,当然也可以直接使用远程仓库的SSH链接
git remote add origin github:<你的GitHub账户名称>/<你的仓库名称>.git