折腾来折腾去

pikipity的blog

向 Github 添加 SSH 公匙

今天用 octopress 遇到一点小问题,在向 Github 发布自己的 post 的时候出现错误:

Permission denied (publickey). fatal: The remote end hung up unexpectedly

看到 publickey,我突然想到我好想忘了向 Github 添加我自己的公匙了,问了一下谷姐,看到这里的解答,果然是这个原因。我想如果重新设定一下 octopress 的github 登陆设置应该也是可以的,但是如果每次重启电脑都要这样来一次也太麻烦了,于是果断还是去添加一次吧,一劳永逸(最好还是先到这里按照步骤检查一下)。

Mac 设置方法见这里,Windows 设置方法见这里(Windows 需要在 Git Bash 里使用下面的命令),Linux 见这里,三者大同小异,唯一的区别应该就是复制 ssh key 的时候使用的命令不一样吧。步骤如下:

  1. 检查是否存在 .ssh 文件夹

     $ cd ~/.ssh
    

    如果没有这个文件夹,跳到第三步,如果有,则继续

  2. 备份一下当前已有的 ssh 秘钥

     $ ls
     $ mkdir key_backup
     $ cp id_rsa* key_backup
     $ rm id_rsa*
    
  3. 产生新的 ssh 秘钥

     $ ssh-keygen -t rsa -C "your_email@example.com"
    

    your_email@example.com"就是github上你用来上传的邮箱,如果你没修改过就是你用来注册账户的那个邮箱,输入上面的命令并回车后会引导你生成你的 RSA 秘钥对,如下:

     Enter file in which to save the key (/Users/you/.ssh/id_rsa): [按回车]
     Enter passphrase (empty for no passphrase): [输入一个通关密语]
     Enter same passphrase again: [把通关密语再输一遍]
    

    通关密语一般建议输入一个10到30字元的字符串(别输中文),这关系到你将来传输信息的保密性。成功后你会看到下内容

     Your identification has been saved in /Users/you/.ssh/id_rsa.
     Your public key has been saved in /Users/you/.ssh/id_rsa.pub.
     The key fingerprint is:
     01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db your_email@example.com
    
  4. 将我们的 ssh 秘钥添加到 Github。首先复制我们的公匙,Mac 用下面的命令:

     $ pbcopy < ~/.ssh/id_rsa.pub
    

    Linux 用下面的命令(如果没有 xclip,先安装一下吧,很好用,sudo apt-get install xclip):

     $ xclip -sel clip < ~/.ssh/id_rsa.pub
    

    Windows 用下面的命令:

     $ clip < ~/.ssh/id_rsa.pub
    

    然后就是到 Github 网站把公匙粘贴过去。步骤如下:

    • 到你的账户设定

    • 点击左栏中的 “SSH Keys”

    • 点击 “Add SSH key”

    • 在 “Key” 的输入框中粘贴

    • 点击 “Add key”

  5. 现在你可以测试一下了,用下面命令

     $ ssh -T git@github.com
    

    你会得到下面信息:

     The authenticity of host 'github.com (207.97.227.239)' 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)?
    

    输入 “yes",回车,你会看到下面信息:

     Hi username! You've successfully authenticated, but GitHub does not provide shell access.
    

    如果 “username” 正确,那么就 OK 了。

如果你看到 “access denied",请考虑使用 HTTPS



Comments