为git设置ssh

使用HTTPS时,每次执行与远程服务器通信的操作时都需要进行身份验证(提供用户名和密码)。本页向您展示了如何使用安全shell(ssh)与BitBucket或GitHub服务器通信,并避免手动键入密码。

第1步。检查是否存在默认标识

git bash shell附带一个ssh客户机。请执行以下操作以验证您的安装:

  1. 双击git bash图标以启动终端会话。

  2. 输入以下命令以验证ssh客户机是否可用:

    $ ssh -v
    OpenSSH_4.6p1, OpenSSL 0.9.8e 23 Feb 2007
    usage: ssh [-1246AaCfgkMNnqsTtVvXxY] [-b bind_address] [-c cipher_spec]
    [-D [bind_address:]port] [-e escape_char] [-F configfile]
    [-i identity_file] [-L [bind_address:]port:host:hostport]
    [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
    [-R [bind_address:]port:host:hostport] [-S ctl_path]
    [-w local_tun[:remote_tun]] [user@]hostname [command]
    
  3. 如果安装了ssh,请转到下一步。

    如果您没有安装ssh,现在就用包管理器安装它。

  4. 列出~/.ssh目录的内容。

    如果您没有在bash上使用ssh,您可能会看到如下内容:

    $ ls -a ~/.ssh
    ls: /c/Users/your-user-name/.ssh: No such file or directory
    

    如果您已经有了默认身份,您将看到两个ID_*文件:

    $ ls -a ~/.ssh
    .    ..    id_rsa    id_rsa.pub  known_hosts
    

    在这种情况下,默认标识使用RSA加密(id_rsa.pub)。如果要为BitBucket帐户使用现有的默认标识,请跳过下一节并转到创建配置文件。

第2步。设置默认身份

默认情况下,系统会将所有标识的密钥添加到/users/your user name/.ssh目录中。以下过程将创建默认标识。

  1. 在本地系统中打开终端。在命令行输入ssh keygen::

    $ ssh-keygen
    Generating public/private rsa key pair.
    Enter file in which to save the key:
    

    要创建名称不是默认名称的密钥,请指定该密钥的完整路径。提示时输入并租用密码。除非您需要脚本等过程的密钥,否则应始终提供密码短语。该命令使用其公钥和私钥创建默认标识。

  2. 列出~/.ssh的内容以查看密钥文件。您应该看到如下内容:

    $ ls ~/.ssh
    id_rsa  id_rsa.pub
    

    该命令创建了两个文件,一个用于公钥(例如id_rsa.pub),另一个用于私钥(例如id_rsa)。

第3步。创建ssh配置文件

  1. 使用文本编辑器编辑~/.ssh/config文件。使用以下格式将以下条目添加到配置文件:

    Host bitbucket.org
     IdentityFile ~/.ssh/id_rsa
    
    Host github.com
     IdentityFile ~/.ssh/id_rsa
    

    第二行缩进。缩进(一个空格)很重要,因此请确保包含它。第二行是您的私钥文件的位置。

  2. 保存并关闭文件。

  3. 重启Gitbash终端。

第4步。更新.bashrc配置文件

将Gitbash shell配置为在启动shell时自动启动代理是一个好主意。.bashrc文件是shell初始化文件。要自动启动代理,请执行以下操作。

  1. 启动Gitbash。

  2. 编辑~/.bashrc文件。

    将以下行添加到文件:

    SSH_ENV=$HOME/.ssh/environment
    
    # start the ssh-agent
    function start_agent {
        echo "Initializing new SSH agent..."
        # spawn ssh-agent
        /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
        echo succeeded
        chmod 600 "${SSH_ENV}"
        . "${SSH_ENV}" > /dev/null
        /usr/bin/ssh-add
    }
    
    if [ -f "${SSH_ENV}" ]; then
         . "${SSH_ENV}" > /dev/null
         ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
            start_agent;
        }
    else
        start_agent;
    fi
    
  3. 保存并关闭文件。

  4. 重启Gitbash终端。

  5. 系统提示您输入密码短语。

  6. 输入您的密码。接受密码后,系统将显示命令shell提示。通过查询ssh代理验证脚本标识是否成功添加了您的标识::

    $ ssh-add -l
    

    在将公钥安装到BitBucket GitHub之后,使用此脚本应该可以防止每次从BitBucket推或拉存储库时都必须输入密码。

第5步。在BitBucket GitHub帐户上安装公钥

在BitBucket中:

  1. 打开浏览器并登录BitBucket。

  2. 从菜单栏中选择avatar>管理帐户。

  3. 系统显示“帐户设置”页。单击ssh键。显示ssh密钥页。它显示任何现有键的列表。然后,下面是一个用于标记和输入新键的对话框。

    将公钥文件的内容复制到ssh key字段中。单击添加键按钮。系统将密钥添加到您的帐户。

在Github中:

  1. 转到“帐户设置”,一切都与上面的差不多。

返回Gitbash终端窗口:

  1. 通过输入以下命令验证配置:

    ssh -T git@bitbucket.org
    
    ssh -T git@github.com
    

    命令消息告诉您哪个BitBucket帐户可以使用该密钥登录。验证该命令是否返回您的帐户名。

第6步。配置存储库以使用ssh协议

存储库使用的URL取决于您使用的协议(https和ssh)。

在BitBucket中:

Github也一样:

*  ssh://git@github.com/accountname/reponame.git

*  https://accountname@github.com/accountname/reponame.git

所以…

  1. 查看当前存储库配置文件 .git/config ,应该类似于:

    [remote "origin"]
      fetch = +refs/heads/*:refs/remotes/origin/*
      url = https://accountname@domain/accountname/reponame.git
    [branch "master"]
      remote = origin
      merge = refs/heads/master
    
  2. 更改URL::

    [remote "origin"]
      fetch = +refs/heads/*:refs/remotes/origin/*
      url = ssh://git@domain/accountname/reponame.git
    [branch "master"]
      remote = origin
      merge = refs/heads/master
    
  3. 保存编辑并关闭文件。