配置SSH连接Git—使用非默认密钥名称(非id_rsa)
由于已经配置了id_rsa负责远程服务器的ssh连接,在配置git时,再创建id_rsa会覆盖ssh_key文件,故需要使用非默认密钥名称
生成新的SSH密钥
ssh-keygen -t ed25519 -C "<your github email>"
# -C后面的是自定义的密钥注释/标签,这里一般输入自己的邮箱
# 此时会询问你是否自定义密钥名字和路径,按需修改即可
# Generating public/private ed25519 key pair.
# Enter file in which to save the key (~/.ssh/id_ed25519): ~/.ssh/id_git
# 是否需要给该密钥添加密码,一般直接敲回车跳过
# Enter passphrase (empty for no passphrase):
# Enter same passphrase again:
# Your identification has been saved in id_git.
# Your public key has been saved in id_git.pub.
# The key fingerprint is: xxx
# The key's randomart image is: xxx
如果希望一次到位可以尝试
ssh-keygen -t ed25519 -C "<your github email>" -f ~/.ssh/id_git
添加密钥到Github账户
先把公钥内容输出复制
cat ~/.ssh/id_git.pub
复制公钥内容到自己的Github账户中,具体地:点击Github右上角账户图标→Settings→SSH and GPG keys→New SSH key,在Key一栏粘贴公钥内容,在Title一栏设定这个SSH密钥的名称
配置 系统使用git密钥而不是id_rsa
选项1:配置SSH Config 文件
通过以下命令创建 SSH Config 文件
touch ~/.ssh/config
编辑Config文件
nano ~/.ssh/config
输入以下内容,Ctrl
+S
保存、Ctrl
+X
退出
# Github
Host github.com
HostName github.com
IdentityFile ~/.ssh/id_git
具体的配置项含义如下:
-
Host
:主机配置的标识符。 -
HostName
:主机的地址或域名。 -
IdentityFile
:用于身份验证的私钥文件路径。
选项2:添加密钥到SSH-Agent
启动SSH-Agent:
eval "$(ssh-agent -s)"
添加密钥
ssh-add ~/.ssh/id_rsa
- 注意,SSH-Agent在每次终端会话结束时自动终止。每次开启新的终端窗口或重启计算机后,都需要重新运行启动SSH-Agent的命令和添加密钥的命令。故而更推荐
选项1:配置SSH Config
设置文件权限
给私钥、公钥和SSH Config文件设置0600文件权限
chmod 600 ~/.ssh/config/id_ras
chmod 600 ~/.ssh/config/id_ras.pub
chmod 600 ~/.ssh/config/config
- 注意,如果不给文件设置0600权限,给0644或0755权限,在后续链接时会出现
Permission denied (publickey)
报错
验证
执行完上述两步操作后,正常情况下已经配置成功了,此时可以验证一下:
ssh -T git@github.com
如果输出以下内容,则表示配置成功,此时即可直接进行任何git操作。
Hi xxx! You've successfully authenticated, but GitHub does not provide shell access.
把Git仓库的Https url修改为SSH url
在未配置Git SSH之前clone的仓库使用都是Https Url,该仓库此时的remote协议仍然时Https协议,然而SSH密钥连接只支持SSH url,不支持Https url,故会要求输账户密码。
在仓库下输入以下命令查看remote协议
git remote -v
# 如果输出类似以下内容,则说明remote协议是HTTPS协议
# https://github.com/xxx/xxx.git
# 也可以查看仓库内的.git/config文件。
# [remote "origin"]
# url = https://github.com:YOUR_ACCOUNT/YOUR_PROJECT.git
# fetch = +refs/heads/*:refs/remotes/origin/*
修改Remote协议
git remote set-url origin git@github.com:xxx/xxx.git
如果端口无响应或网络环境不好,还可尝试
git remote set-url origin ssh://git@ssh.github.com:443/xxx/xxx.git
# Github 官方提供的 443 端口的 SSH(依然是 SSH 协议),适用于限制访问 22 端口的网络环境
空空如也!