0x00 git
准备
首先确认已安装Git,可以通过 git –version
命令可以查看当前安装的版本。
可以通过命令进行更新
git clone https://github.com/git/git
Git共有三个级别的config文件,分别是system
、global
和local
。
system
配置整个系统只有一个
global
配置每个账户只有一个
local
在仓库目录才能看到该配置
配置仓库用户信息
- 一个用户信息走遍各个托管网站
直接把生成的ssh key放到各个网站里,然后配置global
的gitconfig
,就可以了,不用看下面的方法了。
- 希望不同托管网站使用不同的用户信息
那么gitlab、github、gitee各需一个不同的密钥。
那就创建三个密钥,不同的网站识别使用对应的密钥。
给不同的仓库配置local
的gitconfig
:
git config --local user.name "你的名字"
git config --local user.email "你的邮箱"
可以继续往下文看。
0x01 生成多个密钥
1. 生成新的 SSH keys
生成多个git密钥
ssh-keygen -t rsa -f ~/.ssh/id_rsa.github -C "xx@xxx.com"
ssh-keygen -t rsa -f ~/.ssh/id_rsa.gitlab -C "xx@xxx.com"
ssh-keygen -t rsa -f ~/.ssh/id_rsa.gitee -C "xx@xxx.com"
在~/.ssh下面会出现三组密钥:
- id_rsa.github
- id_rsa.github.pub
- id_rsa.gitlab
- id_rsa.gitlab.pub
- id_rsa.gitee
- id_rsa.gitee.pub
0x02 添加配置文件
若无 config 文件,则需创建 config 文件
touch ~/.ssh/config
config 里需要填的内容
亲测可以不缩进,所以方便看,建议缩进。
#Default gitHub user Self
Host github
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa.github
Host gitlab
HostName gitlab.com
User git
IdentityFile ~/.ssh/id_rsa.gitlab
Host gitee
Port 22
HostName gitee.com
User git
IdentityFile ~/.ssh/id_rsa.gitee
# 其他自己搭建的
Host custom
Port 22
HostName git.custom.com
User git
IdentityFile ~/.ssh/lab_rsa.custom
然后把对应的公钥添加到github
、gitlab
、gitee
中。
测试是否成功:
ssh -T git@github
ssh -T git@gitlab
ssh -T git@gitee
ssh -T git@custom
0x03 .ssh/config
简单说明
参考https://zhuanlan.zhihu.com/p/35922004
SSH 参数配置有3个层次:
- 命令行参数,如
-p 10086, -i /path/to/identity_file
等选项来设置SSH的端口号或认证证书位置 - 针对某个用户的配置文件,所在路径为
~/.ssh/config
,默认是不存在的,需要手动创建 - 针对系统所有用户的配置文件, 所在路径为
/etc/ssh/ssh_config
参数重要性的顺序也是1>2>3,即越近的配置重要性越高。
这里主要讲述第2种情况下的配置方式,即针对~/.ssh/config
文件的写法进行说明。
主要的规则如下:
- 每项配置都是
参数名 参数值
或参数值=参数名
的形式,其中参数名
不区分大小写,而参数值
区分大小写 - 不同主机的配置通过
Host
参数来区分,一个配置文件里面可以有针对多个Host
的配置 - 以
#
开头的是注释 - 同一个Host的配置内部,
参数名 参数值
和参数值=参数名
等价
常见参数类型
Host
类似昵称,用于标识某个特定的配置。
例如:
加如下配置:
Host cluster
HostName 192.168.11.11
User tom
想要ssh连接到192.168.11.11
主机,拷贝a.txt
文件。
先链接服务器:
ssh cluster
然后拷贝,没有配置,要这么写:
scp a.txt tom@192.168.11.11:~/
加了配置,可以简化成这样:
scp a.txt cluster:~/
省略了用户名和IP地址。
HostName
需要ssh连接过去的主机名,一般是IP地址.
User
登录主机的用户名。
IdentityFile
认证证书文件,默认位置是~/.ssh/id_rsa
, ~/ssh/id_dsa
等
Port
SSH访问主机的端口号,默认是22端口,在非默认情况下需要设置该值
其他
常用的参数就这些,别的参数可以在命令行通过man ssh_config来查看。