Connecting to GitHub with SSH
本文最后更新于:2023年2月8日 晚上
通过SSH连接到GitHub
整理自GitHub官方帮助文档:https://help.github.com/articles/connecting-to-github-with-ssh
一、关于SSH
使用SSH协议,您可以连接和验证远程服务器和服务。通过使用SSH密钥,您可以在每次访问GitHub时无需提供用户名或密码。
设置SSH时,您将生成SSH密钥并将其添加到ssh-agent,然后将密钥添加到您的GitHub帐户。将SSH密钥添加到ssh-agent可确保您的SSH密钥通过使用密码短语拥有更多一层的安全。有关更多信息,请参阅“ Working with SSH key passphrases”。
建议定期查看SSH密钥列表,并废除无效或已被盗用的密钥。
如果您的SSH密钥未使用超过一年,那么GitHub将自动删除您不活跃的SSH密钥以确保安全。有关更多信息,请参阅“Deleted or missing SSH keys”。
二、检查现有的SSH密钥
本文仅介绍Windows系统的相关操作
Mac或Linux请参考官方帮助文档:https://help.github.com/en/articles/checking-for-existing-ssh-keys
在生成SSH密钥之前,您可以检查是否本地已存在SSH密钥。
注意:在OpenSSH 7.0中不推荐使用DSA密钥。如果您的操作系统使用OpenSSH,则在设置SSH时需要使用RSA密钥或其他类型类型的密钥。例如,如果您的操作系统是MacOS Sierra,则可以使用RSA密钥设置SSH。
1.打开终端Git Bash。
2.输入ls -al ~/.ssh
查看是否系统中已存在SSH密钥:
$ ls -al ~/.ssh
# Lists the files in your .ssh directory, if they exist
3.查看您的列表中是否已存在公共SSH密钥。
默认情况下,公钥的文件名是以下之一:
id_dsa.pub
id_ecdsa.pub
id_ed25519.pub
id_rsa.pub
- 如果您的系统中不存在公钥和私钥对,或者没有任何可用的密钥可以连接到GitHub,那么你可以生成新的SSH密钥。
- 如果列表中存在用于连接到GitHub 的现有公钥和私钥对(例如id_rsa.pub和id_rsa),则可以将SSH密钥添加到ssh-agent。
提示:如果终端返回〜/ .ssh不存在的错误,不用担心!我们将在生成新的SSH密钥时创建它。
三、生成新的SSH密钥并将其添加到ssh-agent
本文仅介绍Windows系统的相关操作
Mac或Linux请参考官方帮助文档:https://help.github.com/en/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent
检查现有SSH密钥后,可以生成用于身份验证的新的SSH密钥并将其添加到ssh-agent。
如果您还没有SSH密钥,则必须生成新的SSH密钥。如果您不确定是否已有SSH密钥,请检查现有密钥。
如果您不想在每次使用SSH密钥时重新输入密码,则可以将密钥添加到SSH agent,SSH agent会管理您的SSH密钥并记住您的密码。
生成新的SSH密钥
注意:如果您还没有SSH密钥,则必须生成新的SSH密钥。否则直接跳到下一步将现有的SSH密钥添加到ssh-agent中。
1.打开Git Bash.
2.粘贴下面的文本,用您的GitHub邮箱地址替换双引号中的内容。
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
这将使用您提供的电子邮件作为标记创建一个新的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.根据提示,您需要输入密码。更多信息请查看“Working with SSH key passphrases”。
> Enter passphrase (empty for no passphrase): [Type a passphrase]
> Enter same passphrase again: [Type passphrase again]
将SSH密钥添加到ssh-agent
在将新的SSH密钥添加到ssh-agent以管理密钥之前,您应该检查现有的SSH密钥并生成新的SSH密钥。
如果安装了GitHub Desktop,则可以使用它来克隆存储库而不处理SSH密钥。它还附带了Git Bash工具,这是git
在Windows 上运行命令的首选方式。
1.确保ssh-agent正在运行:
如果您使用的Git Shell是随着GitHub Desktop一起安装的,那么ssh-agent应该在运行中。
如果您使用的时其它命令提示符终端,例如Git for Windows,则可以使用“Working with SSH key passphrases”中所说的“Auto-launching the ssh-agent”,或者通过以下命令手动启动:
# start the ssh-agent in the background $ eval $(ssh-agent -s) > Agent pid 59566
2.将SSH私钥添加到ssh-agent。如果您使用了其他名称创建密钥,或者要添加不同名称的已有的密钥,请将如下命令中的id_rsa替换为您的私钥文件的名称。
$ ssh-add ~/.ssh/id_rsa
3.将SSH密钥添加到您的GitHub帐户。
四、添加一个新的SSH密钥到您的GitHub帐户
要配置您的GitHub帐户使用新的(或现有的)SSH密钥,还需要将其添加到GitHub帐户中。
在向GitHub帐户添加新的SSH密钥之前,您应该已经做了一下两步:
在您的GitHub帐户中添加新的SSH密钥后,您可以重新配置所有的本地存储库以使用SSH。更多信息,请参阅“Switching remote URLs from HTTPS to SSH”。
注意:在OpenSSH 7.0中不推荐使用DSA密钥。如果您的操作系统使用OpenSSH,则在设置SSH时需要使用RSA密钥或其他类型类型的密钥。例如,如果您的操作系统是MacOS Sierra,则可以使用RSA密钥设置SSH。
1.将SSH密钥复制到剪贴板。
如果您的SSH密钥文件的名称与示例代码不同,请根据您的文件名修改以下命令并执行。复制密钥时,请勿添加任何换行符或空格。
$ clip < ~/.ssh/id_rsa.pub
# Copies the contents of the id_rsa.pub file to your clipboard
提示:如果
clip
不起作用,您可以找到隐藏的.ssh
文件夹,用文本编辑器打开密钥文件,然后将其中的内容复制到剪贴板。
2.在GitHub任意页面的右上角,单击您的头像,然后单击“Settings”。
3.在用户设置侧栏中,单击SSH and GPG keys。
4.单击“New SSH key”或“ Add SSH key”。
5.在“Title”文本框中,为新密钥添加描述性标签。例如,如果您使用的是个人Mac,则可以将此键称为“Personal MacBook Air”。
6.将您的密钥粘贴到“Key”对应得文本框。
7.单击“Add SSH key”。
8.如果出现提示,请输入您的GitHub密码以确认。
五、测试SSH连接
本文仅介绍Windows系统的相关操作
Mac或Linux请参考官方帮助文档:https://help.github.com/en/articles/testing-your-ssh-connection
在设置SSH密钥并将其添加到GitHub帐户后,您可以测试您的连接。
在测试SSH连接之前,您应该已经做了以下几步:
测试连接时,您需要使用您之前创建SSH密钥时的密码验证此操作。有关使用SSH密钥密码的更多信息,请参阅“Working with SSH key passphrases”。
1.打开Git Bash。
2.输入以下内容:
$ ssh -T git@github.com
# Attempts to ssh to GitHub
您可能会看到如下提示信息:
> 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.验证生成的消息是否包含您的用户名。如果返回“permission denied”,请参阅“Error: Permission denied (publickey)”。
六、使用SSH密钥密码
您可以加密SSH密钥并配置身份验证代理,这样您就不必在每次使用SSH密钥时重新输入密码。
使用SSH密钥,如果有人获得对您计算机的访问权限,他们也可以访问使用该密钥的每个系统。要添加额外的安全层,可以对SSH密钥添加密码。您可以使用ssh-agent
来安全地保存您的密码,这样您就不必重新输入密码。
添加或更改密码
您可以通过键入以下命令来更改现有私钥的密码,而无需重新生成密钥对:
$ ssh-keygen -p
# Start the SSH key creation process
> Enter file in which the key is (/Users/you/.ssh/id_rsa): [Hit enter]
> Key has comment '/Users/you/.ssh/id_rsa'
> Enter new passphrase (empty for no passphrase): [Type new passphrase]
> Enter same passphrase again: [One more time for luck]
> Your identification has been saved with the new passphrase.
如果您的SSH密钥已有密码,系统会提示您输入原密码,验证后才能更改为新密码。
在Git for Windows上自动启动ssh-agent
如果您使用的是与GitHub Desktop一起安装的Git Shell,则无需执行以下步骤。GitHub Desktop会自动为您启动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/id_dsa
),那么您需要告知您的SSH身份验证代理在哪里找到它。要将你的SSH密钥添加到ssh-agent,请键入ssh-add ~/path/to/my_key
。更多信息,请参阅“Generating a new SSH key and adding it to the ssh-agent”
提示:如果您想
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
进程将持续运行,直到您注销,关闭计算机或终止这个进程。