Git-SSH:在一台设备通过ssh管理多个Git账户
本文介绍了如何通过SSH配置实现一台电脑管理多个Git账户。主要内容包括:1. 安装Git和SSH环境,Windows/Linux系统下的具体步骤;2. 账户配置方法,包括为每个账户生成独立密钥(ed25519算法)、使用ssh-agent管理密钥、将公钥添加到Gitee/GitHub等平台;3. 创建SSH配置文件(~/.ssh/config),通过Host别名实现账户隔离;4. 测试连接和仓库
·
引言
一台电脑上面一般只能有一个Git账户,这往往意味着我们推送的时候只能推送到已经登录的账户上面,在我们自己的电脑上面还好,我们可以只登录一个账户,但是当在别人的电脑或者公司电脑上面的时候,由于不止一个ssh账户,这时候想推送到我们的账户就只能先把别人的账户登出,再登录我们的账户才行,并且还需要重新配置各种信息,十分繁琐不说还容易搞混账号。
今天就这个问题我教大家如何使用SSH通过configs进行多账户配置,可以实现一台电脑Git多个账户,并且不会发生混杂的情况。
目录
1. Git和SSH安装
1.1 windows安装Git & ssh
- 访问官网:前往 Git for Windows (https://gitforwindows.org/)官网下载最新的安装程序。
- 运行安装程序:按照向导进行安装,以下关键步骤需要注意:
- 组件选择:保持默认,确保
Git Bash Here和Git GUI Here被选中。 - 默认编辑器:推荐选择
Use Visual Studio Code as Git's default editor(如果已安装VSCode)。 - 调整PATH环境:选择
Git from the command line and also from 3rd-party software。这将把Git工具添加到系统PATH,允许您在PowerShell和CMD中直接使用git命令。 - SSH客户端:选择
Use bundled OpenSSH。这将使用Git自带的SSH客户端,兼容性最好,避免与系统OpenSSH产生冲突。 - 行结束符转换:选择
Checkout Windows-style, commit Unix-style line endings(推荐)。这能很好地处理跨平台项目的换行符问题。 - 其余选项保持默认,完成安装。
1.2 Linux安装Git & ssh
- Linux使用命令来安装Git,ssh一般Linux自带所以不用安装,但是也可以更新一些openssh:
# 安装git
sudo apt update
sudo apt install git openssh-client
# 升级openssh
sudo apt upgrade openssh-server openssh-client
sudo systemctl restart sshd
1.3 验证安装效果
- Windows和Linux都可以使用以下命令查看安装是否成功:
git --version
ssh -V
2. 账户配置
2.1 生成SSH密钥ed25519
- 使用以下命令生成ssh密钥,Windows管理员打开Powershell生成;
- Linux直接在终端里面输入命令即可生成;
- 后面的-C加你的邮箱是注释信息,理论上来说生成一个密钥就够用了,但是这里的方法是给每个账户都生成一个密钥,这样可以保证每个账户的独立性,并且保证后续不会出错,输入以下的命令生成密钥,其中-t是加密方式,-C是注释,-f是文件路径和文件名;
- 如果你是Gitee账户-f就写<gitee_用户名>,如果是github就写<github_用户名>
ssh-keygen -t ed25519 -C "<邮箱>" -f ~/.ssh/id_ed25519_<gitee_or_github_你的用户名>
- 执行后,会提示您选择密钥保存路径,直接按回车使用默认路径。
- 提示设置密钥密码(passphrase),可直接回车留空(便于自动化),但设置密码会更安全
2.2 ssh-agent管理密钥
2.2.1 Windows命令
- 输入以下命令进行ssh密钥查看和管理
# 列出 .ssh 目录下的文件
Get-ChildItem -Path ~\.ssh
# 查看公钥内容(用于添加到Git平台)
Get-Content ~\.ssh\id_ed25519_<gitee_or_github_你的用户名>.pub
# 也可以去到C:\User\<Name>\.ssh\...下面找到对应的pub手动查看
- 启动 SSH-Agent 服务,这个用来对你的密钥进行管理,这也是实现对不同账户进行管理的关键,开不同的门用不同的钥匙:
# 检查 ssh-agent 服务状态
Get-Service ssh-agent
# 如果服务未运行,启动它
Start-Service ssh-agent
# 设置服务为自动启动
Set-Service -Name ssh-agent -StartupType Automatic
- 将 SSH 私钥添加到 SSH-Agent,注意添加的是不带pub的那个文件,路径别搞错
# 添加默认路径的私钥
ssh-add ~\.ssh\id_ed25519_<gitee_or_github_你的用户名>
# 列出所有已加载的密钥及其指纹
ssh-add -l
# 查看更详细的信息
ssh-add -L
# 移除特定密钥
ssh-add -d ~\.ssh\id_ed25519_<gitee_or_github_你的用户名>
# 移除所有密钥
ssh-add -D
2.2.2 Linux命令
- Linux流程一致,只是命令不同,按顺序输入以下命令:
# 生成 Ed25519 密钥对
ssh-keygen -t ed25519 -C "<邮箱>" -f ~/.ssh/id_ed25519_<gitee_or_github_你的用户名>
# 列出 .ssh 目录
ls -la ~/.ssh/
# 查看公钥
cat ~/.ssh/id_ed25519_<gitee_or_github_你的用户名>.pub
# 启动 ssh-agent 并设置环境变量
eval "$(ssh-agent -s)"
# 添加默认私钥
ssh-add ~/.ssh/id_ed25519_<gitee_or_github_你的用户名>
# 列出所有已加载密钥的指纹
ssh-add -l
# 列出完整公钥
ssh-add -L
# 移除特定密钥
ssh-add -d ~/.ssh/id_ed25519_<gitee_or_github_你的用户名>
# 移除所有密钥
ssh-add -D
2.2.3 注意事项
- 1、如果你有新的账户就使用对应的命令生成新的密钥,并且使用ssh-add添加进ssh-agent中;
- 2、Linux中可以在~/.bashrc中添加一下代码,使ssh-agent可以自启动:
# 启动 ssh-agent
if [ -z "$SSH_AUTH_SOCK" ]; then
# 检查是否已有 ssh-agent 在运行
if ! pgrep -u "$USER" ssh-agent > /dev/null; then
# 启动新的 ssh-agent
eval "$(ssh-agent -s)" > /dev/null
fi
fi
2.2 配置Gitee和Github账户
2.2.1 Gitee账户设置
- 账户设置较为简单,打开你的Gitee账户,点击右上角头像下面的设置,找到SSH公钥,然后把你生成的ed25519公钥复制进来,就是.pub里面的内容,注意使复制的内容大概是:
- ssh-ed25519 AAAAC......../ <your email>
- 后面的邮箱可以不用复制,也可以都粘贴到公钥栏里面,但是前面的ssh-ed25519必须包含
- 生成了几个就复制几个进来,每次增加一个即可。

2.2.2 Github账户设置
- Github同样的点击右上角头像然后点击setting进入设置,点击左边栏的SSH and GPG keys即可进行设置,步骤和Gitee类似,不过多赘述,就是需要多点一个New SSH key



2.3 创建ssh/configs文件
- 假设你有两个配置,一个是Gitee账户,一个是Github账户,并且生成了两个密钥,想要使用ssh-agent实现两个账户的控制,那么最后一步就是配置configs,在你每次使用ssh链接的时候,ssh-agent就会从configs中找到对应的配置并且实现自动连接。
- 还记得你一开始生成密钥的时候的命名吗?这里配置就需要用到,具体参考如下:
# ~/.ssh/config
# 此文件用于定义SSH连接的快捷方式和参数,SSH客户端会自动读取。
# ==================== GitHub 配置 ====================
# 使用别名 `github_你的用户名` 进行连接,例如:`ssh -T git@github_你的用户名`
Host github_你的用户名
# 指定远程服务器的真实域名或IP地址。对于GitHub,固定为 github.com
HostName github.com
# 指定登录用户名。对于所有Git托管平台(GitHub, Gitee, GitLab等),此处必须固定为 'git'。
# 平台会通过您提供的公钥来识别具体是哪个账户。
User git
# 指定用于此连接的私钥文件路径。
# 请将 `<github_你的用户名>` 替换为您的GitHub用户名,例如 `id_ed25519_github_alice`
IdentityFile ~/.ssh/id_ed25519_github_你的用户名
# 设为 yes 时,SSH将只使用上面 `IdentityFile` 指定的密钥进行认证。
# 这能防止客户端尝试使用其他默认密钥,在多密钥环境下至关重要。
IdentitiesOnly yes
# 客户端每隔30秒向服务器发送一个空包以保持连接活跃,防止因无数据交互而被防火墙断开。
ServerAliveInterval 30
# 客户端连续3次(即90秒内)未收到服务器响应后,将主动断开连接。
# 这避免了连接“假死”卡住的情况。
ServerAliveCountMax 3
# 启用TCP层的保活机制,用于检测网络链路本身的故障(如网线断开)。
# 与上层的 `ServerAliveInterval` 互补,共同保障连接稳定性。
TCPKeepAlive yes
# ==================== Gitee 配置 ====================
# 使用别名 `gitee_你的用户名` 进行连接,例如:`ssh -T git@gitee_你的用户名`
Host gitee_你的用户名
HostName gitee.com
User git
IdentityFile ~/.ssh/id_ed25519_gitee_你的用户名
IdentitiesOnly yes
ServerAliveInterval 30
ServerAliveCountMax 3
TCPKeepAlive yes
- 这样当你使用别名进行连接的时候,他会自动使用~/.ssh/id_ed25519_<gitee_你的用户名>所对应的密钥,从而实现精准连接。
2.4 配置用户信息
- 这一点也需要注意,在你对一个仓库进行操作之前我都建议先配置用户信息,一般是配置一个全局的在配置一个局部的,全局配置是你最常使用的账户,局部配置则是你需要隔离起来的另一个账户,当然在不是自己的电脑上面的时候也采用局部配置,来确保你修改仓库的时候知道哪个账户正在修改,这是为了保证信息的可追溯性:
# 1. 设置全局配置(例如,用于个人GitHub账户)
git config --global user.name "你的个人用户名"
git config --global user.email "personal@example.com"
# 2. 进入特定项目目录比如公司项目,设置局部配置(覆盖全局设置)
cd ~/projects/company-project
git config user.name "你的公司用户名"
git config user.email "work@company.com"
3. 测试!
- 测试非常简单,与ssh测试的命令类似,但是这里需要换成你自己的别名:
ssh -T git@github_你的用户名
# 成功时会显示:Hi your-username! You've successfully authenticated...
- 这里需要注意仓库名也需要变动,相当于任何原来为github.com或者gitee.com的官方命名的地方都需要变成你自己的别名,这样才可以索引到正确的仓库,可以看看下面一般的索引和使用了ssh-agent的索引有什么不同。
# 一般索引:
git@github.com:your-username/your-repo.git
# ssh-agent索引:
git@github_你的用户名:your-username/your-repo.git
- 这也意味着你每次使用不同的账户拉取的时候就需要把被拉取的仓库索引改成ssh-agent的形式,不然的话拉取进来的仓库就是默认格式,很多时候不是使用的你需要的账户进行拉取的,比如你在公司里面,如果不改变索引形式的话,那么很可能使用的是公司的git账户拉取,而不是你自己的账户。
- 同样的如果远程仓库已经是被拉取后的状态,进行过PR,那么如果你需要推送到你自己的其他账户的仓库,也需要修改远程仓库索引形式为:否则无法正确推送到自己的仓库
git remote set-url origin git@github_你的用户名:your-username/your-repo.git
结语
这样就完成了使用ssh-agent管理多个不同的Git账户,这个最大的好处就是再也不用每次都只能推送到一个账户里面了,也可以在不同的地方不同的电脑上面修改自己的仓库,来保证每次修改都具有独立性和可操控性,简洁而优雅。如果有任何问题,欢迎大家留言,我会逐一回复!
觉得写的不错的话请给我点赞收藏转发!
更多推荐



所有评论(0)