为git设置ssh¶
注解
来源
主要来自:https://confluence.atlassian.com/display/bitback/set+up+ssh+for+git
与以下内容混合:https://help.github.com/categories/56/articles https://help.github.com/articles/working-with-ssh-key-passphrases http://nerderude.com/2011/03/17/simply-your-life-with-an-ssh-config-file/
使用HTTPS时,每次执行与远程服务器通信的操作时都需要进行身份验证(提供用户名和密码)。本页向您展示了如何使用安全shell(ssh)与BitBucket或GitHub服务器通信,并避免手动键入密码。
第1步。检查是否存在默认标识¶
git bash shell附带一个ssh客户机。请执行以下操作以验证您的安装:
双击git bash图标以启动终端会话。
输入以下命令以验证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]
如果安装了ssh,请转到下一步。
如果您没有安装ssh,现在就用包管理器安装它。
列出~/.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目录中。以下过程将创建默认标识。
在本地系统中打开终端。在命令行输入ssh keygen::
$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key:
要创建名称不是默认名称的密钥,请指定该密钥的完整路径。提示时输入并租用密码。除非您需要脚本等过程的密钥,否则应始终提供密码短语。该命令使用其公钥和私钥创建默认标识。
列出~/.ssh的内容以查看密钥文件。您应该看到如下内容:
$ ls ~/.ssh id_rsa id_rsa.pub
该命令创建了两个文件,一个用于公钥(例如id_rsa.pub),另一个用于私钥(例如id_rsa)。
第3步。创建ssh配置文件¶
使用文本编辑器编辑~/.ssh/config文件。使用以下格式将以下条目添加到配置文件:
Host bitbucket.org IdentityFile ~/.ssh/id_rsa Host github.com IdentityFile ~/.ssh/id_rsa
第二行缩进。缩进(一个空格)很重要,因此请确保包含它。第二行是您的私钥文件的位置。
保存并关闭文件。
重启Gitbash终端。
第4步。更新.bashrc配置文件¶
将Gitbash shell配置为在启动shell时自动启动代理是一个好主意。.bashrc文件是shell初始化文件。要自动启动代理,请执行以下操作。
启动Gitbash。
编辑~/.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
保存并关闭文件。
重启Gitbash终端。
系统提示您输入密码短语。
输入您的密码。接受密码后,系统将显示命令shell提示。通过查询ssh代理验证脚本标识是否成功添加了您的标识::
$ ssh-add -l
在将公钥安装到BitBucket GitHub之后,使用此脚本应该可以防止每次从BitBucket推或拉存储库时都必须输入密码。
第5步。在BitBucket GitHub帐户上安装公钥¶
在BitBucket中:
打开浏览器并登录BitBucket。
从菜单栏中选择avatar>管理帐户。
系统显示“帐户设置”页。单击ssh键。显示ssh密钥页。它显示任何现有键的列表。然后,下面是一个用于标记和输入新键的对话框。
将公钥文件的内容复制到ssh key字段中。单击添加键按钮。系统将密钥添加到您的帐户。
在Github中:
转到“帐户设置”,一切都与上面的差不多。
返回Gitbash终端窗口:
通过输入以下命令验证配置:
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
所以…
查看当前存储库配置文件 .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
更改URL::
[remote "origin"] fetch = +refs/heads/*:refs/remotes/origin/* url = ssh://git@domain/accountname/reponame.git [branch "master"] remote = origin merge = refs/heads/master
保存编辑并关闭文件。