Mac 上如何使用 SSH key

Posted by Matt Reach on November 6, 2015

Introduction

SSH key 用来标识某台计算机被信任!一旦被信任,以后在这台计算机上进行的操作就不需要输入你账户的密码,可以理解为令牌,拿着令牌就可以做事,当然权限是可控制的!SSH key 是部分平台的,也就说今天举例的 MAC 系统可以用,经常使用的 Windows 也可以用,Linux等系统均可,因为说白了就是使用了一种加密方法,计算机生成了一对密钥;一个公钥,一个私钥,公钥当然就是公开使用的,一般会用于第三方平台,私钥是保留在计算机里的,因此在操作的时候只需公私钥配对即可,只要配对就认为是信任的计算机所为,就可以继续操作!今天以 SSH key 方式访问 github 举例…

使用场景

  • 免密码登录远程服务器
  • 免密码推送、拉取 git 远程仓库
    • 比如我的博客使用的是 git page,说白了就是一个特殊的 github 仓库而已;本地生成站点之后,就需要 push 到 github,为了不用每次都输入用户名和密码,可以配置 ssh key,然后把远程仓库地址设置为 ssh 格式即可。

    • 工作时虽然使用的是内部的 git 托管服务器 git lab,但使用方式跟 github 也没啥不一样的,同样支持配置 ssh key。

查看本地 ssh 密钥

ssh 公钥默认存放在 ~/.ssh 目录下,因此可以 ls 查看下:

1
2
3
4
5
6
7
8
9
10
11
12
13
ls ~/.ssh

如果曾经使用过 GitHub 客户端的话,应该是这样的:
-rw-------   1 xuqianlong  staff  1766  3 11  2015 github_rsa
-rw-r--r--@  1 xuqianlong  staff   405 10 18 17:31 github_rsa.pub
-rw-r--r--   1 xuqianlong  staff  1595  7  2 01:33 known_hosts

也有可能是这样的:
-rw-------  1 xuqianlong  staff  3243  8 20 00:15 id_rsa
-rw-r--r--  1 xuqianlong  staff   742  8 20 00:15 id_rsa.pub
-rw-r--r--  1 xuqianlong  staff   803  8 20 09:38 known_hosts

只不过是文件名的前缀不同罢了;

如果 ssh 已经添加到 github 了,那么可以通过 ssh -T git@github.com 验证下:

1
2
3
4
还没添加:
Permission denied (publickey).
或者:
Hi debugly! You've successfully authenticated, but GitHub does not provide shell access.

如果本地没有可用的 ssh key,或者你不想用之前的,或者想让之前的实效,那么你可以全部删掉,然后重新生成即可。

生成新的 SSH Key

使用 ssh-keygen -t rsa -b 4096 -C "xx@yyyzzz.com" 生成,这里的 “xx@yyyzzz.com” 替换成你的邮箱或者随便写都行,没限制的,最好起个能分的清楚的名字,有可能你有多个电脑,配置了多个 key。

输入上面的命令后,接下来连续 3 次回车就好了,具体细节是:

  • Enter file in which to save the key (/Users/xuqianlong/.ssh/id_rsa): 文件存放位置,默认(~/.ssh)
  • Enter passphrase (empty for no passphrase):我这里无需设置密码,直接回车
  • Enter same passphrase again: 再次输入密码回车

这是我执行的结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
bogon:~ xuqianlong$ ssh-keygen -t rsa -b 4096 -C "qianlongxu@home.mbp"
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/xuqianlong/.ssh/id_rsa): 
Created directory '/Users/xuqianlong/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /Users/xuqianlong/.ssh/id_rsa.
Your public key has been saved in /Users/xuqianlong/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:GzJ1j3gh0ws/IwF/KMQwoIvHhmnoPPW/v+w+pmDmSFo qianlongxu@home.mbp
The key's randomart image is:
+---[RSA 4096]----+
|  ..ooo          |
| .   o.o o       |
|.     . O =      |
|o=     o X =     |
|*.+.  o S B .    |
|+o. .  o = o     |
| + E =  .        |
|  = = o .o       |
| . . . +B*o      |
+----[SHA256]-----+
  • 添加到 ssh-agent

ssh-add ~/.ssh/id_rsa : Identity added: /Users/xuqianlong/.ssh/id_rsa (/Users/xuqianlong/.ssh/id_rsa) 即使不操作这一步,一般也没问题的。

如果英文不错,那么可以直接去看 github 官网提供的文档: Generating-ssh-key .

Github 账号添加 SSH key

  • 将公钥复制到剪切板

pbcopy < ~/.ssh/id_rsa.pub 或者 cat ~/.ssh/id_rsa.pub | pbcopy

登录 Github 账号,点击 Setting:

点击左侧的 SSH keys:

点击 Add SSH keys:

直接将公钥复制到输入框里面,一般 title 会自动生成:

点击 Add key 即可:

  • 添加到 github 后检查下 ssh key 状态

ssh -T git@github.com

应该看到如下内容:

1
2
3
The authenticity of host 'github.com (192.30.252.130)' can't be established.
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)?

因为这是第一次使用,没有 IP 记录,因此输入 yes 即可;

1
2
Warning: Permanently added 'github.com,192.30.252.130' (RSA) to the list of known hosts.
Hi debugly! You've successfully authenticated, but GitHub does not provide shell access.

看到你 Github 的用户名后就表示成功了!

体验免密码

  • git clone git@github.com:debugly/NeedUpdate.git
1
2
3
4
5
6
7
Cloning into 'NeedUpdate'...
remote: Counting objects: 149, done.
remote: Compressing objects: 100% (98/98), done.
remote: Total 149 (delta 42), reused 149 (delta 42), pack-reused 0
Receiving objects: 100% (149/149), 10.30 MiB | 16.00 KiB/s, done.
Resolving deltas: 100% (42/42), done.
Checking connectivity... done.