白小兔的小小站

既然选择了远方,便只顾风雨兼程

0%

Git配置SSH key

在日常开发过程中,我们经常用到Github或者Gitlab等平台来对自己的代码进行版本控制。它们支持Https和SSH两种通信协议。使用HTTPS协议时,每次pull或者push操作都需要输入用户名和密码,非常麻烦。相较而言SSH协议则方便得多,只需要我们进行一些初始的配置工作, 后续的操作中,它不需要我们输入用户名密码。

Git配置SSH key

  1. 运行终端(Windows平台可以使用Git Bash),输入以下命令:

    1
    2
    cd ~/.ssh
    ls

    如果已经存在id_rsa.pub 或 id_dsa.pub 文件,可以直接到第3步。

  2. 创建SSH KEY

    1
    ssh-keygen -t rsa -C "[email protected]"

    代码参数含义:

    -t 指定密钥类型,默认是 rsa ,可以省略。
    -C 设置注释文字,比如邮箱。
    -f 指定密钥文件存储文件名。

    以上代码省略了 -f 参数,因此,运行上面那条命令后会让你输入一个文件名,用于保存刚才生成的 SSH key 代码,如:

    1
    2
    Generating public/private rsa key pair.
    Enter file in which to save the key (/c/Users/you/.ssh/id_rsa): [Press enter]

    当然,你也可以不输入文件名,使用默认文件名(推荐),那么就会生成 id_rsa 和 id_rsa.pub 两个秘钥文件。

    接着又会提示你输入两次密码(该密码是你push文件的时候要输入的密码,而不是github管理者的密码),

    当然,你也可以不输入密码,直接按回车。那么push的时候就不需要输入密码,直接提交到Github上了,如:

    1
    2
    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again:

    接下来,就会显示如下代码提示,如:

    1
    2
    3
    4
    Your identification has been saved in /c/Users/you/.ssh/id_rsa.
    Your public key has been saved in /c/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 [email protected]

    当你看到上面这段代码,就说明你的 SSH key已经创建成功,将其添加到Github的SSH key就可以了。

  3. 添加你的 SSH key到 Github

    a. 需要拷贝 id_rsa.pub 文件的内容,你可以用编辑器打开文件复制,也可以用git命令复制该文件的内容,如:

    1
    clip < ~/.ssh/id_rsa.pub

    b. 登录Github账号,从右上角的Settings进入,点击菜单栏的SSH and GPG keys

    c. 点击New SSH key 按钮添加一个 SSH key。把复制的SSH key代码粘贴到Key所对应的输入框中,记得SSH key代码的前后不要留有空格或者回车。上面的Title对应的输入框可以输入一个该SSH key显示在Github上的别名,默认的会使用你的邮件名称。

  4. 测试SSH key

    在终端(或Git Bash)中输入以下命令:

    1
    ssh -T [email protected]

    当输入以上代码时,会有一段警告代码,如:

    1
    2
    3
    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回车既可。如果在创建 SSH key 的时候设置了密码,接下来就会提示输入密码,如:

    1
    Enter passphrase for key '/c/Users/Administrator/.ssh/id_rsa':

    如果你密码输错了,会再要求你输入,直到输入正确为止。

    注意:输入密码时如果输错一个字就会不正确,使用删除键是无法更正的。

    密码正确后会看到下面这段话:

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

    如果用户名是正确的,说明SSH密钥设置成功。如果看到 ”access denied” ,这表示拒绝访问,那就需要使用 Https去访问,而不是SSH 。

可能的问题

  1. 上面的SSH key配置成功,但是pull或push代码时仍然要求输入用户名和密码。

    这是由于当前项目使用的是Https协议,而不是SSH,我们需要进行以下操作:

    1
    2
    git remote remove origin
    git remote add origin [email protected]:Username/YourRepoName.git

    接下来重新设置track branch:

    1
    git branch --set-upstream-to=origin/master master

    完成这一步应该可以正常免用户名和密码进行Git操作了。