likes
comments
collection
share

git多账号配置和多个ssh配置

作者站长头像
站长
· 阅读数 4

有时候我们的代码仓库时使用 ssh 方式,那就必须要配置 ssh 之后才能 clone pull push .... SSH 协议可以实现安全的免密认证,且性能比 HTTP(S) 协议更好

如何配置ssh

没有安装git的同学可以出门右转了。。。

  • ssh的算法类型现在有 ED25519(这是一种现代且安全的公钥加密算法) 和 RSA

    第一步 查看已存在的 SSH 密钥

    • 在生成新的 SSH 密钥前,请先确认是否需要使用本地已生成的SSH密钥,SSH 密钥对一般存放在本地用户的根目录下。Linux、Mac 请直接使用以下命令查看已存在的公钥,Windows 用户在 WSL(需要 windows10 或以上)或 Git Bash下使用以下命令查看已生成公钥:
    ED25519 算法:
    cat ~/.ssh/id_ed25519.pub
    
    RSA 算法
    cat ~/.ssh/id_rsa.pub
    

    如果返回一长串以 ssh-ed25519 或 ssh-rsa 开头的字符串, 说明已存在本地公钥,你可以跳过步骤二生成 SSH 密钥,直接操作步骤三(说明ssh是通用得 也就是 不同得代码平台 可以使用同一个ssh)

    第二步:生成 SSH 密钥

    若步骤一未返回指定内容字符串,表示本地暂无可用 SSH 密钥,需要生成新的 SSH 密钥,请按如下步骤操作:

    1. 访问终端( Windows 请使用 WSL或 Git Bash),运行ssh-keygen -t。
    2. 输入密钥算法类型和可选的注释。

    注释会出现在.pub文件中,一般可使用邮箱作为注释内容。

    • 基于ED25519算法,生成密钥对命令如下:
      ssh-keygen -t ed25519 -C "<注释内容>"
      
      # ssh-keygen 这是一个用于创建、管理和转换认证密钥的工具。SSH 密钥通常用于身份验证,以安全地访问远程服务器。
      # -t ed25519: 这个选项指定了要生成的密钥类型。ed25519 是一种非常安全的密钥类型,它比 RSA 或 DSA 更现代,并且提供了更高的安全性
      # -C "your_email@example.com": 这个选项允许您为密钥对添加一个注释。通常,这个注释是一个电子邮件地址,但也可以是任何您想要用来识别这个密钥对的文本。请注意,这里的电子邮件地址并不限制或要求密钥必须与这个电子邮件地址相关联;它只是一个帮助用户识别密钥的标签
      
    • 基于RSA算法,生成密钥对命令如下:
      ssh-keygen -t rsa -b 4096 -C "<注释内容>"
      
      #  -t rsa 指定了密钥类型为 RSA
      #  -b 4096 指定了密钥长度(4096 位)  可以省略这个参数 
      #  -C 同上
      
      ssh-keygen -t rsa -C "<注释内容>"
      
    1. 点击回车,选择 SSH 密钥生成路径。

      路径一般都是 C:\Users\你的用户名.ssh git多账号配置和多个ssh配置

    2. 设置一个密钥口令。

      口令默认为空,你可以选择使用口令保护私钥文件。如果你不想在每次使用 SSH 协议访问仓库时,都要输入用于保护私钥文件的口令,可以在创建密钥时,输入空口令。

    3. 点击回车,完成密钥对创建。

    第三步:拷贝公钥

    除了在命令行打印出已生成的公钥信息手动复制外,可以使用命令拷贝公钥到粘贴板下,请参考操作系统使用以下命令进行拷贝:

    Windows(在WSL或Git Bash下):

    cat ~/.ssh/id_ed25519.pub | clip
    

    Mac:

    tr -d '\n' < ~/.ssh/id_ed25519.pub | pbcopy
    

    GNU/Linux (requires xclip):

    xclip -sel clip < ~/.ssh/id_ed25519.pub
    

    还可以直接用记事本或者vscode等工具打开.pub文件,手动复制 然后粘贴到 代码网站里面去(不同网站的地方不一样,但是都有一个 ssh 关键字的 按钮 然后进去add 然后保存 )

生成多个ssh(已经有id_rsa和id_rsa.pub两个文件,在不想使用同一个ssh的情况下,怎么生成新的ssh-key呢?)

  • rsa

    如果您已经有了 id_rsa 和 id_rsa.pub 这两个文件,它们分别代表您的私钥和公钥。如果您想生成一个新的 SSH 密钥对,您应该使用不同的文件名,以避免覆盖现有的密钥

    生成新的 SSH 密钥对的命令通常是:

    ssh-keygen -t rsa -b 4096 -C "your_email@example.com" // 这个不指定文件名的  使用默认文件名
    

    如果您使用上述命令而不指定输出文件名,ssh-keygen 会默认使用 id_rsa 和 id_rsa.pub 作为私钥和公钥的文件名。如果您想为新的密钥对使用不同的文件名,可以添加 -f 选项并指定新的文件名,例如:

    ssh-keygen -t rsa -b 4096 -C "your_email@example.com" -f new_key   
    
    # -f 选项来指定私钥的文件名。如果您不提供 -f 选项,ssh-keygen 会使用默认的 id_rsa 作为私钥文件名
    

    new_key 在这里指的是一个新的 SSH 密钥对的私钥文件名。当您使用 ssh-keygen 命令生成一个新的 SSH 密钥对时,可以使用 -f 选项来指定私钥的文件名。如果您不提供 -f 选项,ssh-keygen 会使用默认的 id_rsa 作为私钥文件名

  • ed25519

    ssh-keygen -t ed25519 -C "your_email@example.com"
    

    这个命令用于生成一个新的 SSH 密钥对,其中密钥类型为 ed25519,这是一种现代且安全的公钥加密算法。-C 选项用于提供一个注释,通常是一个电子邮件地址,以帮助您识别这个密钥对。在这个命令中,"your_email@example.com" 应该被替换成您自己的电子邮件地址。

    当您运行这个命令时,ssh-keygen 会生成两个文件:一个私钥文件(默认命名为 id_ed25519)和一个公钥文件(默认命名为 id_ed25519.pub)。这些文件通常存储在用户夹目录下的 .ssh 文件夹中。私钥应该保持私密,并且只被用于生成签名,而公钥则可以安全地分发给任何人,用于验证您的身份。

    指定私钥文件名

    还是使用 -f 选项来指定文件名

    ssh-keygen -t ed25519 -f my_custom_private_key -C "your_email@example.com"
    

    运行这个命令后,ssh-keygen 将在当前工作目录下(指定文件名的命令 ssh生成地址就在 点击 git bash的地址 !!! 不再是系统文件夹了!!所以可以手动去系统盘的的ssh文件夹下面生成)生成名为 my_custom_private_key 的私钥文件和名为 my_custom_private_key.pub 的公钥文件

做完这一步的时候,会发现虽然把不同的ssh配置到了不同的代码网站,但是还是不能愉快的 clone pull push .... 这个就是因为 生成不同的ssh时 填写的是不同的邮箱(填同一个邮箱的自己想想 你都填一个邮箱了 为啥要生成多个ssh。。。正常情况下 一个git账号对应一个邮箱地址) 所以本地的git账号只能满足其中一个ssh 除非你每次都手动切换git账号来匹配不同的ssh(想想都累啊)

所以就需要设置一台电脑登录多个 git账号

如何配置多个git账号呢?

git的配置分为三个级别

system-----系统级别,可以理解为你的电脑账户信息 global-----全局级别,如果配置了,所有项目共用的账户信息 local------项目级别,单独项目配置的账户信息

这三个级别的优先级为 local > global > system

  1. 清空全局配置

    先看看有没有设置过全局的

    git config --global --list
    

    这个命令查看全局git账户配置信息,如果输出的结果中包含user.name和user.email的信息 执行下面的两个命令清除git的global信息

    1、git config --global --unset user.name
    2、git config --global --unset user.email
    
  2. 清空原来ssh配置 (直接去文件夹下面删掉即可)

    这一步不是必须的 之前生成的也可以用(前提是多个ssh指定了文件名的),不然还是得重新生成

  3. 分别生成需要得的ssh (如果没有第二步也就没有第三步了) 搞完之后是这样(我只搞了两个) git多账号配置和多个ssh配置

  4. 添加对应得ssh到代码网站

  5. 统一管理gitlab与github账户信息 (这个很重要)

    打开.ssh目录下config文件(如果没有就新建一个,需要注意得是 就叫 config 没有后缀名) 并编辑,

    # 我们这儿以 gitlab 和 github 为例
    # gitlab
    Host gitlab.com # 主机名
    HostName gitlab.com  # 可以不加 https 前缀  HostName指定了实际要连接的服务器的主机名。在大多数情况下,这个值与您上面的Host指令相匹配,但您可以为某个主机设置别名或覆盖默认的主机名
    User yourname/git的账号
    PreferredAuthentications publickey # publickey意味着SSH客户端将首先尝试使用公钥/私钥对进行身份验证
    IdentityFile ~/.ssh/gitlab_id_rsa # IdentityFile 指定了私钥文件的路径 ~/.ssh/ 就代表了 ssh文件下 只需要写后面的pub公钥文件名就行  还不用加后缀
    
    # github
    Host github.com 
    HostName github.com
    User yourname1/git的账号
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/github_id_rsa
    
    
    
    # 分割线
    PreferredAuthentications  可以有以下的值
    1. gssapi-with-mic:使用 GSSAPI(Generic Security Services Application Program Interface)进行身份验证,这是一种基于 Kerberos 等网络认证协议的身份验证方法。
    2. hostbased:基于主机的身份验证,客户端使用主机上的密钥进行身份验证。这种方法不常用,通常需要服务器端有客户端主机的公钥信息。
    3. publickey:使用公钥/私钥对进行身份验证。客户端提供私钥,服务器验证与预存储的公钥是否匹配。
    4. keyboard-interactive:基于键盘交互的身份验证,服务器可能会向客户端发送一个或多个提示,要求用户输入信息(如密码或其他凭据)。
    5. password:使用用户名和密码进行身份验证。这是最常见的身份验证方法之一。
    
    需要注意的是:不是所有的 SSH 服务器都支持上述所有认证方法。服务器配置将决定哪些认证方法可用
    
    PreferredAuthentications 选项的语法如下:
    PreferredAuthentications publickey,keyboard-interactive,password
    
    

然后可以试试看是否成功

ssh -T git@gitlab.com
ssh -T git@github.com

完成上述步骤之后,多账号配置就完成了,但是这时候你提交代码会发现一个问题, 提交的用户名是你自己的电脑用户名,还有可能根本提交不上去/拉不下来,说你没有设置账号密码

这是因为 git得global账号被我们一开始就干掉了 所以配置一下就可以了,仅需要为每个项目单独的配置local级别的账户信息即可 因为 优先级为 local > global > system

git config --local user.name "xxxx"
git config --local user.email "xxxx"

# 执行完之后可以通过下面这个命令验证
git config --local --list

# 需要注意得是:有几个git账号就要配置几次

git多账号配置和多个ssh配置

git多账号配置和多个ssh配置 现在再提交代码,就是配置的这个用户名了

清除了全局git账户,之前的用https的项目又该怎么办呢?

这个时候 之前使用https的项目又说没有配置git账户了

很简单,在配置一下就行了

git config --local user.name "xxxx"
git config --local user.email "xxxx"

常用的配置git账号的命令

# 设置全局账号 这样的每次commit就会默认使用全局设置的名称进行提交。
git config --global user.name "yourname"
git config --global user.email "youremail@gmail.com"

# 查看全局配置 
git config --global user.name 
git config --global user.email 

# 查看现有配置
git config --global --list
# 测试配置信息
ssh -T git@xxx
# 配置 全局 or 本地
git config --global[local] user.name "yourName"
git config --global[local] user.email "yourEmail"