美文网首页
使用SSH连接到GitHub

使用SSH连接到GitHub

作者: 程序员汪汪 | 来源:发表于2020-10-07 01:48 被阅读0次

    关于SSH

    使用 SSH 协议可以连接远程服务器和服务并向它们验证。 利用 SSH 密钥可以连接 GitHub,而无需在每次访问时提供用户名或密码。

    检查现有SSH密钥

    在生成SSH密钥之前,你可以检查是否有任何现有的 SSH 密钥。

    Windows || Mac || Linux

    1. Windows下打开Git Bash,Mac和Linux则是打开Terminal(终端)

    2. 输入ls -al ~/.sh以检查是否存在现有SSH密钥:

      $ ls -al ~/.ssh
      total 34
      drwxr-xr-x 1 username 197121    0  9月 16 15:36 ./
      drwxr-xr-x 1 username 197121    0  9月 30 23:33 ../
      -rw-r--r-- 1 username 197121 2602  9月 16 15:29 id_rsa
      -rw-r--r-- 1 username 197121  573  9月 16 15:29 id_rsa.pub
      -rw-r--r-- 1 username 197121  406  9月 16 15:36 known_hosts
      
    3. 检查目录列表以查看是否已经有 SSH 公钥。 默认情况下,公钥的文件名是以下之一:

      • id_rsa.pub
      • id_ecdsa.pub
      • id_ed25519.pub

    如果您没有现有的公钥和私钥对,或者不想使用任何可用于连接到 GitHub 的密钥对,则生成新的 SSH 密钥。

    如果您看到列出的现有公钥和私钥对(例如 id_rsa.pubid_rsa),并且您希望使用它们连接到 GitHub,则可以将 SSH 密钥添加到 ssh-agent。

    如果看到~/.ssh不存在,那么就需要生成新的SSH密钥,生成密钥时,会自动创建。

    生成新SSH密钥并添加到ssh-agent

    检查现有 SSH 密钥后,您可以生成新 SSH 密钥以用于身份验证,然后将其添加到 ssh-agent。

    生成新SSH密钥

    1. Windows下打开Git Bash,Mac或者Linux下打开Terminal。

    2. 粘贴下面的文本(替换为你的 GitHub 电子邮件地址)。

      $ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
      # -t rsa : t是type的缩写,指定密钥的类型,一种是RSA,一种是DSA,GitHub目前已经不支持DSA了。ssh-keygen默认使用RSA密钥
      # -b 4096 :b是bit的缩写,指定的密钥长度。对于RSA密钥,最小要求768位,默认是2048位。命令中的4096指的是RSA密钥长度为4096位。
      # -C "邮箱" :C是comment的缩写。-C表示要提供一个新注释,用于识别这个密钥,所以“”里面不一定非要填邮箱,可以是任何内容,邮箱仅仅是识别用的key
      

      会出现如下提示:这将创建以所提供的电子邮件地址为标签的新 SSH 密钥

      > Generating public/private rsa key pair.
      
    3. 提示您“Enter a file in which to save the key(输入要保存密钥的文件)”时,按 Enter 键。 接受默认文件位置。

      > Enter a file in which to save the key (/c/Users/you/.ssh/id_rsa):[Press enter]
      
    4. 在提示时输入安全密码。

      > Enter passphrase (empty for no passphrase): [Type a passphrase]
      > Enter same passphrase again: [Type passphrase again]
      

      这里,我们先不填,直接回车,出现类似如下信息,SSH密钥就生成了:

      Your identification has been saved in /c/Users/asua/.ssh/id_rsa
      Your public key has been saved in /c/Users/asua/.ssh/id_rsa.pub
      The key fingerprint is:
      SHA256:VlPdd6hxwLDZ3ef9cT/kmTTySNct9YR3Cv/MArvap/g hahaha@gmail.com
      The key's randomart image is:
      +---[RSA 4096]----+
      |          .ooo o |
      |           =o.+o+|
      |          = o+o X|
      |         . ..o *B|
      |        S   .o+*B|
      |       .    .oO=O|
      |            ...**|
      |           o ....|
      |          ooEo   |
      +----[SHA256]-----+
      
      

    将SSH密钥添加到ssh-agent

    将新 SSH 密钥添加到 ssh-agent 以管理密钥之前,要确保你已经拥有SSH密钥。

    将SSH密钥添加到ssh-agent的步骤:

    1. 确保 ssh-agent 正在运行。

      # 在后台启动 ssh-agent
      $ eval $(ssh-agent -s)
      Agent pid 1171
      
    2. 将 SSH 私钥添加到 ssh-agent。 如果您创建了不同名称的密钥,或者您要添加不同名称的现有密钥,请将命令中的 id_rsa 替换为您的私钥文件的名称。

      $ ssh-add ~/.ssh/id_rsa
      Identity added: /c/Users/asua/.ssh/id_rsa (hahaha@gmail.com)
      

    添加完成!

    添加SSH密钥到GitHub账户

    要配置 GitHub 帐户使用新的(或现有)SSH 密钥,您还需要将其添加到 GitHub 帐户。

    1. 将SSH密钥复制到剪贴板

      如果您的 SSH 密钥文件与示例代码不同,请修改文件名以匹配您当前的设置。 在复制密钥时,请勿添加任何新行或空格。

      $ clip < ~/.ssh/id_rsa.pub
      

      如果 clip 不可用,可找到隐藏的 .ssh 文件夹,在常用的文本编辑器中打开该文件,并将其复制到剪贴板。

    2. 在任何页面的右上角,单击您的个人资料照片,然后单击 Settings(设置)

      image-20201001192242182.png
    3. 在用户设置侧边栏中,单击 SSH and GPG keys(SSH 和 GPG 密钥)

      image-20201001192359985.png
    4. 单击 New SSH key(新 SSH 密钥)Add SSH key(添加 SSH 密钥)

      image-20201001192526763.png
    5. 在 "Title"(标题)字段中,为新密钥添加描述性标签。 例如,如果您使用的是个人 Mac,此密钥名称可能是 "Personal MacBook Air"。

    6. 将密钥粘贴到 "Key"(密钥)字段。

      image-20201001192647422.png
    7. 单击 Add SSH key(添加 SSH 密钥)

    8. 如有提示,请确认您的 GitHub 密码。

      image-20201001192809676.png

    测试SSH连接

    设置 SSH 密钥并将其添加到您的 GitHub 帐户后,你可以测试连接。

    测试连接时,您将需要使用密码(即您之前创建的 SSH 密钥密码)验证此操作。

    1. Windows打开Git Bash,Mac和Linux打开Terminal(终端)。

    2. 输入以下内容:

      # 尝试通过ssh连接到GitHub
      $ ssh -T git@github.com
      

      可能会看到类似如下的警告:

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

      或类似如下:

      > The authenticity of host 'github.com (IP ADDRESS)' can't be established.
      > RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
      > Are you sure you want to continue connecting (yes/no)?
      
    3. 验证您看到的消息中的指纹匹配步骤 2 中的消息之一,然后输入 yes

      > Hi username! You've successfully authenticated, but GitHub does not provide shell access.
      
    4. 验证生成的消息包含您的用户名。

    使用SSH密钥密码

    你可以保护 SSH 密钥并配置身份验证代理,这样就不必在每次使用 SSH 密钥时重新输入密码。

    使用 SSH 密钥时,如果有人获得你计算机的访问权限,他们也可以使用该密钥访问每个系统。 要添加额外的安全层,可以向 SSH 密钥添加密码。 可以使用 ssh-agent 安全地保存密码,从而不必重新输入。

    添加或更改密码

    通过输入以下命令,您可以更改现有私钥的密码而无需重新生成密钥对:

    $ ssh-keygen -p
    Enter file in which the key is (/c/Users/asua/.ssh/id_rsa): # 如果你的密钥就在默认位置,直接回车就行,如果不是,就手动输入
    Key has comment 'hahaha@gmail.com' # 之前生成密钥时,我输入的内容
    Enter new passphrase (empty for no passphrase): # 输入新密码
    Enter same passphrase again: # 再次输入密码
    Your identification has been saved with the new passphrase. # 身份信息和密码一起保存
    

    如果您的密钥已有密码,系统将提示您输入该密码,然后才能更改为新密码。

    在 Git for Windows上自启动ssh-agent

    你可以在打开 bash 或 Git shell 时自动运行 ssh-agent。 复制以下行并将其粘贴到 Git shell 中的 ~/.profile~/.bashrc 文件中:

    env=~/.ssh/agent.env
    
    agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }
    
    agent_start () {
        (umask 077; ssh-agent >| "$env")
        . "$env" >| /dev/null ; }
    
    agent_load_env
    
    # agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
    agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)
    
    if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
        agent_start
        ssh-add
    elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
        ssh-add
    fi
    
    unset env
    

    如果你的私钥没有存储在默认位置之一(如 ~/.ssh/id_rsa),你需要告知 SSH 身份验证代理其所在位置。 要将密钥添加到 ssh-agent,请输入 ssh-add ~/path/to/my_key

    如果想要 ssh-agent 在一段时间后忘记您的密钥,可通过运行 ssh-add -t <seconds> 进行配置。

    现在,当您初次运行 Git Bash 时,系统将提示您输入密码:

    > Initializing new SSH agent...
    > succeeded
    > Enter passphrase for /c/Users/you/.ssh/id_rsa:
    > Identity added: /c/Users/you/.ssh/id_rsa (/c/Users/you/.ssh/id_rsa)
    > Welcome to Git (version 1.6.0.2-preview20080923)
    >
    > Run 'git help git' to display the help index.
    > Run 'git help ' to display help for specific commands.
    

    ssh-agent 进程将继续运行,直到您注销、关闭计算机或终止该进程。

    如果没有 ~/.profile~/.bashrc 文件,则自己创建一个:

    $ touch ~/.profile # 在/c/Users/username路径下新建.profile文件,就是和.ssh文件在同一个目录下
    

    用文本编辑器(Notepad++或者vim)打开.profile文件,将上面的脚本代码复制到.profile文件中保存后退出,重新打开Git Bash后,输入SSH的密码即可。

    一台机器上管理多个GitHub账号的SSH密钥

    如果你在一台机器使用两个github账号(比如私人账号abc和工作账号xyz),两个帐号用不同的SSH KEY,还需要编辑一下配置文件~/.ssh/config:

    Host personal.github.com  
        HostName github.com  
        User git  
        IdentityFile ~/.ssh/personal_rsa  
        
    Host work.github.com  
        HostName github.com  
        User git  
        IdentityFile ~/.ssh/work_rsa
    
    • Host: "personal.github.com"是一个"别名",可以随意命名。

    • HostName:比如我工作的git仓储地址是git@code.sleep.com:username/repo_name.git, 那么我的HostName就要填"sleep.com";

    • IdentityFile: 所使用的公钥文件;

    配置完毕,用下面的命令测试一下:

    ssh -T git@personal.github.com
    ssh -T git@work.github.com
    # 注: @符号后面的"personal.github.com"就是在~/.ssh/config文件中指定的"Host"项
    
    1. 为已经检出的repository指定github账号:

      在已经检出的repos目录下执行:

      git config  user.name "your-id"
      git config  user.email "your-id@gmail.com"
      

      修改.git/config并找到[remote "origin"],修改url的值为:

      [remote "origin"]   
          url = git@personal.github.com:user_name/repos_name.git
      

      其中, personal.github.com就是在配置文件~/.ssh/config中的Host项, 设置完成后, 在这个工程目录git push会自动以此git帐号提交代码。

    2. 使用指定账号clone已存在的repository:

      • 使用指定账号clone一个已经存在的repos:
        git clone git@personal.github.com:user_name/repos_name.git, 上面命令中的"personal.github.com"就是在~/.ssh/config文件中指定的"Host"项, "user_name"是指定提交代码的账户名。

      • 然后还需要git config一下user.name和user.email, 进入repository目录执行:

        git config user.name your_name
        git config user.email your_email
        

        以后在此repos下git push origin master就是使用指定的用户push.

    3. 使用指定账号git init新的repository:

      $ git init
      $ git add .
      $ git commit -m "first commit"
      $ git remote add origin git@personal.github.com:user_name/testing.git
      $ git push -u origin master
      

    相关文章

      网友评论

          本文标题:使用SSH连接到GitHub

          本文链接:https://www.haomeiwen.com/subject/knbiuktx.html