«

如何使用密钥密码连接线上Git

srdf 发布于 阅读:214 编程知识


  为了便于在多个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访问。否则,会告诉你拒绝连接,说明你使用了错误的密钥。修正的方法会在后文告知。

  连接失败效果:

连接失败效果

效果图

Gitee效果

Github效果

切换平台

  切换平台的办法也很简单。你只需要在当前的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 Gitee Github


扫描二维码,在手机上阅读
取消
微信二维码
微信二维码
支付宝二维码
收到1条评论
avatar
user-6oxMWTGN 2023-12-18 17:57
过情关~谁敢闯~
回复