use multiple sshkey
文章目录
日常的工作生活中,我们可能会遇到不止一个 github/gitlab 服务器。虽然 ssh key 可以避免每次和服务器交互的时候都要输入密码,但是如果我想区分工作和生活的 ssh key 又该怎么做呢?其实只需要一个简单的 config 文件就可以了。
1.检查是否已经存在 sshkey
cd ~/.ssh #进入到user家目录的.ssh目录下 |
如果可以看到类似 id_rsa.pub
id_dsa.pub
文件,可以跳过第二步创建。
2.创建SSH Key
执行命令:
ssh-keygen -t rsa -b 4096 -C "[email protected]"
代码参数含义:
-t
指定密钥类型,默认是rsa
,可以省略。-b
制定秘钥长度,一般 2048 就够了,这里设置为 4096 。-C
设置注释文字,比如邮箱。-f
指定密钥文件存储文件名。以上代码省略了
-f
参数,因此,运行上面那条命令后会让你输入一个文件名,用于保存刚才生成的 SSH key 代码,如:Generating public/private rsa key pair.
# Enter file in which to save the key (/c/Users/you/.ssh/id_rsa):当然,你也可以不输入文件名,直接回车使用默认文件名,那么就会生成
id_rsa
和id_rsa.pub
两个秘钥文件。
3. 使用 config 管理多个 host 的 sshkey
如果你需要在多个git host工作,就需要多个ssh key去支持,就需要在上面手动输入密钥文件的文件名了。(比如 id_rsa_github) 然后使用config文件来实现管理。
先创建一个config文件(目录:~/.ssh/config),里面的内容和格式参考下面的示例:
host mygitlab # 用来区分不同的host,可以随意起
Hostname mygitlab # 需要访问的 host 的域名或者IP地址
User myusername # 这里是ssh登录使用的用户名
IdentityFile ~/.ssh/id_rsa # 生成的密钥文件路径
Host gitlab.com
Hostname altssh.gitlab.com
User git
Port 443
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_gitlab
host github
HostName ssh.github.com
User git
Port 443 # ssh协议默认是22端口,但是可以使用443端口,走HTTPS更安全(需要服务器支持)。
IdentityFile ~/.ssh/id_rsa_github接着又会提示你输入两次密码(该密码是你push文件的时候要输入的密码)
当然,你也可以不输入密码,直接按回车。那么push的时候就不需要输入密码,直接提交。
Enter passphrase (empty for no passphrase):
# Enter same passphrase again:
4.添加到 gitlab/github 上去
首先你需要拷贝 id_rsa.pub 文件的内容,你可以用编辑器打开文件复制,也可以用git命令复制该文件的内容,如:
clip < ~/.ssh/id_rsa.pub
进入到 gitlab/github 的用户设置页面。然后点击菜单栏的 SSH key 进入页面添加 SSH key。
把你复制的 SSH key 代码粘贴到 key 所对应的输入框中,记得 SSH key 代码的前后不要留有空格或者回车。
5.测试
gitlab 上可以使用下面的命令测试:
ssh -T git@mygitlab
# 成功的话会有一句 `Welcome to GitLab, xxx!`github 的host可以使用下面的命令测试:
ssh -T [email protected]
# 成功的话能看到 `Hi xxx! You've successfully authenticated, but GitHub does not provide shell access.`
6. 确定 ssh-agent 在运行
- 通过执行先的命令确定
ssh-agent
正在运行
# start the ssh-agent in the background |
- 把新建的私钥加入到 ssh-agent
ssh-add ~/.ssh/id_rsa |