一、说明
-
SSH生成公私钥对,将公钥添加到Github账户,将私钥添加到ssh-agent代理验证。
-
多账户
Git查找默认私钥位置(
~/.ssh/id_rsa
或~/.ssh/id_dsa
),如果使用多用户多仓库,则需要将生成的多个SSH私钥并都添加到SSH代理。 -
私钥加密
可以向SSH私钥中添加密码,通过SSH代理来安全地保存。
-
Mac上预装了Git和OpenSSH
-
免密原理:
1.客户端:将SSH公钥储存在远程SSH服务器,携带公钥发起请求。
2.服务端:将发送过来的公钥 与服务器authorized_keys中授权过的公钥进行比较。
3.服务端:如果公钥一致(Key Exchange Success),向客户端发送一段使用SSH公钥加密过的随机字符串进行身份质询(Challenge)。
4.客户端:用私钥解密后再发回给远程SSH服务器,服务器对比回包中解密出来的随机字符串是否一致。如果一致,则可信。
-
DSA、RSA、ECC
SSH2使用DSA:DSA 只能用于数字签名,而无法用于加密。签名快,验签慢。
SSH1使用RSA:RSA 可作为数字签名,也可作加密算法。RSA 具有更为广泛的部署与支持。
ECC(椭圆曲线算法"-t ecdsa"):相同密钥长度下,安全性能更高。椭圆曲线算法只有在较新版本的 openssl 与 ssh-keygen 中才被支持。
-
SSH
认证方式主要有2种:① 基于口令的安全认证: ssh [用户名]@[IP],每次输入口令(中间人攻击);
② 基于密钥的安全认证: 传输一次公钥,免密登录。Git的SSH方式就是通过公钥进行认证的。
-
一、创建多个SSH公私钥对
-
查看SSH公私钥对
cd ~/.ssh # .pub文件为公钥,对应名字为私钥 # known_hosts为可信服务器
-
生成公私钥对:
SSH参数说明:
- -t :密钥类型,默认是 rsa ,可以省略。
- -C:注释文字,常用邮箱。
- -f: 私钥位置,默认为当前用户home路径下的.ssh隐藏目录, 也就是~/.ssh/
- -p:添加或更改私钥密码。
- -b 4096:密钥长度,RSA密钥,最小要求768位,默认是2048位。
-
RSA算法生成公私钥对
# 生成内网机器的密钥对 ssh-keygen -t rsa -C "your_email@example.com" -f ~/.ssh/lan_rsa # 对私钥加密 Enter passphrase (empty for no passphrase): Enter same passphrase again: # 生成gitee的密钥对 ssh-keygen -t rsa -C "your_email@example.com" -f ~/.ssh/gitee_rsa # 生成github的密钥对 ssh-keygen -t rsa -C "your_email@example.com" -f ~/.ssh/github_rsa
-
Github采用ed25519 算法生成公私钥对
旧系统不支持 Ed25519 算法,Gitblit v1.9.1无法添加Ed25519生成的公钥。
ssh-keygen -t ed25519 -C "your_email@example.com" -f ~/.ssh/lan_rsa ssh-keygen -t ed25519 -C "your_email@example.com" -f ~/.ssh/gitee_rsa ssh-keygen -t ed25519 -C "your_email@example.com" -f ~/.ssh/github_rsa
二、配置SSH代理验证
单账号SSH代理查找默认私钥位置,不用配置~/.ssh/config。
1.GitHub参考
2.实操记录
-
启动ssh-agent
eval "$(ssh-agent -s)"
-
编辑SSH配置文件
-
创建文件
touch config
-
编辑文件
# LAN # User 用户名(建议,不强制) Host http://192.168.0.1:1234/ # 服务器的主域名 HostName http://192.168.0.1:1234/ # 服务器的主域名 AddKeysToAgent yes # 将 SSH Key 添加到 ssh-agent UseKeychain yes # 将私钥添加到系统的钥匙链。如果私钥不添加密码,则不需要。 IdentityFile ~/.ssh/lan_rsa # 私钥文件位置 # gitee Host gitee.com HostName gitee.com AddKeysToAgent yes UseKeychain yes IdentityFile ~/.ssh/gitee_rsa # github Host github.com HostName github.com AddKeysToAgent yes UseKeychain yes IdentityFile ~/.ssh/github_rsa
-
-
将SSH私钥添加到ssh-agent
# 如果选择向私钥添加密码,则需要-K ssh-add -K ~/.ssh/lan_rsa ssh-add -K ~/.ssh/gitee_rsa ssh-add -K ~/.ssh/github_rsa
三、将公钥复制到Git服务器
-
复制公钥到剪切板
# 将 SSH 公钥复制到剪贴板 pbcopy < ~/.ssh/lan_rsa.pub pbcopy < ~/.ssh/gitee_rsa.pub pbcopy < ~/.ssh/github_rsa.pub
-
将公钥保存到Git服务端
打开github ,点击头像 =>> settings =>> SSH and GPG keys =>> New SSH key
四、测试
ssh -T ssh://duke147@192.168.1.1:29317
ssh -T git@github.com
ssh -T git@gitee.com
五、其他
-
当前登录信息
# 查看全部配置 git config --list # 查看当前登录账号: git config user.name # 查看当前登录邮箱: git config user.email # 修改全局用户名和邮箱: git config --global user.name "Your_username" git config --global user.email "Your_email"