如何使用密钥密码连接线上Git
为了便于在多个Git线上平台之间切换自己的ssh密钥以供访问,我根据Github文档里的 使用 SSH 密钥密码 中 在 Git for Windows 上自动启动 ssh-agent 一节提供的默认脚本做了新的扩展,相应的代码我会放在文章的末尾。我会依次解读新脚本的使用方法。以下是正文:
基本功能
选择线上平台
启动Git Bash后,系统会询问你选择哪种线上的Git平台。平台的选择使用编号表示,默认从0开始,你也可以将各平台的序号修改成自己的方式。0表示Github,1表示Gitee。输入其他整数时使用默认的Default.key。你只有30秒的时间选择线上平台。如果超过时间未选,也会使用默认密钥。
检查是否添加密钥
这个动作自动执行。执行完毕后,它会返回中文提示,告诉你ssh-agent是否添加了密钥,但是并不代表密钥与选择的平台一致。针对这种情况的检查将在本章的最后一节加以说明。
如果没有添加密钥,它会根据上一步选择的平台返回对应的密钥路径。如果密钥存在密码,它会启动ssh-asks应用要求你输入正确的密码。之后,会继续后面的步骤。对于这一步骤,示例图如下:
添加密钥
无论是否添加密钥,都会使用Github的默认脚本进行处理。我仅对这个脚本中的 ssh-add
命令的后面添加了FilePath变量,用以接收之前选择的密钥文件。
测试连接
这一步将根据第一步选择的平台做一次连接测试。如果连接成功,它会向你打招呼,并告诉你Github或Gitee未提供shell访问。否则,会告诉你拒绝连接,说明你使用了错误的密钥。修正的方法会在后文告知。
连接失败效果:
效果图
切换平台
切换平台的办法也很简单。你只需要在当前的bash环境里执行 ssh-add -D
命令,一次性删除所有的脚本,然后重启bash,选择新的平台,然后继续前面的流程即可。
下载脚本
由于本站资源开启了防盗链保护,因此,这个脚本我直接贴在本文中,各位可以自行复制,并按需修改,不要直接使用。直接使用产生的各种问题本人不对此负责。
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
# 手动选择线上的Git仓库,然后返回指定的密钥路径。
Github=0
Gitee=1
read -p "请选择Git仓库的位置。必须是一个整数。如果是Github,就输入0;如果是Gitee,就输入1:" -t 30 GitUpload
select_git(){
if (($GitUpload == $Github))
then
FilePath="E:/me/OpenSShFile/Github.key"
elif
(($GitUpload == $Gitee))
then
FilePath="E:/me/OpenSShFile/Gitee.key"
else
FilePath="E:/me/OpenSShFile/Default.key"
fi
echo $FilePath
}
# 检查是否向GitUpload提供参数
if test -z "$GitUpload"; then
echo "未选择数值,将使用默认的Github环境。"
GitUpload=0
echo $GitUpload
fi
# 如果未添加密钥,就需要执行select_git,选择正确的密钥。
result=`ssh-add -l`
errmsg="The agent has no identities."
if [ "$result" == "$errmsg" ]
then
echo "你没有添加密钥!"
select_git
else
echo "你添加了密钥。将根据选择的平台测试连接。"
fi
# 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 $FilePath
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
ssh-add $FilePath
fi
unset env
# 根据选择的平台测试连接
if (($GitUpload == 0))
then
ssh -T git@github.com
elif (($GitUpload ==1))
then
ssh -T git@gitee.com
else
echo "你选择了错误的平台!"
fi
后记
使用ssh连接,有如下好处:如果你切换平台后忘记了变更用户名和用户邮箱,那么你也能通过ssh直接克隆仓库代码。而https协议的方式有可能失败。但是,pull代码时必须使用正确的用户信息。
文章标题:如何使用密钥密码连接线上Git
文章链接:https://www.snowdreamsblog.cn/program_expertise/ssh-agent_script.html
本站文章均为原创,未经授权请勿用于任何商业用途