7

自从 3 个多小时以来,我一直在尝试为 github 设置多个帐户并且有点累。我已经尝试了几乎所有可能的方式来描述这里、github 和文章,但都没有奏效。我也是 github 和 Unix 的新手。所以需要你的帮助来解决这个问题。下面是我在做什么

我使用的是 Windows 7,并为两个不同的帐户设置了两个 ssh 密钥。

  1. id_rsa
  2. id_rsa_ac2

比在.ssh用户目录中创建配置文件并添加以下代码

#Account one
Host github.com
    HostName github.com
    PreferredAuthentications publickey
    IdentityFile /c/Projects/.ssh/id_rsa

#Account two
Host ac2.github.com
    HostName github.com
    PreferredAuthentications publickey
    IdentityFile /c/Projects/.ssh/id_rsa_ac2

现在我正在尝试使用以下代码添加遥控器

git remote add origin git@ac2.github.com:myaccount/my.git

并使用以下代码推送

git push origin master

但是当我试图推动它时,它给了我错误: Error: Permission to myaccount/my.git denied to {account}. // where it is considering default user account and not for ac2 user account fatal: Could not read from remote repository.

Please make sure you have the correct access rights and the repository exists.

非常感谢..

附加信息:

我已经测试id_rsa_ac2并给出了成功验证的消息。但奇怪的是使用原始帐户而不是ac2帐户用户名提供用户名

Hi {username!} You've successfully authenticated, but GitHub does not provide shell access. //here user id should be from ac2 but it is showing userid from id_rsa and not from id_rsa_ac2

信息:最终代码

@VonC 的答案有效,如果有人想使用,可以添加最终代码作为我的答案。

4

4 回答 4

4

所以根据@VonC's answer here我做了什么。

  1. 我为另一个帐户生成了 ssh 密钥并添加了 id_rsa_ac2(其中 ac2 用于第二个帐户)
  2. 不仅仅是交叉检查,它适用于ssh -T ac2.github.com
  3. 在 /c/Users/yourname/.ssh/ 目录中创建配置文件(无扩展名)

这是我用于配置文件的代码

#Account one
Host github.com
    HostName github.com
    PreferredAuthentications publickey
    IdentityFile /c/Users/yourname/.ssh/id_rsa
    User git

#Account two
Host ac2.github.com
    HostName github.com
    PreferredAuthentications publickey
    IdentityFile /c/Users/yourname/.ssh/id_rsa_ac2
    User git

因此,现在完成此操作后,您可以根据需要开始使用这两个帐户。

对于主帐户,我添加了远程作为来源,使用git remote add origin git@github/youraccount/rep.git 比推送使用git push origin master这将上传到您的第一个帐户。

为使用的第二个 (ac2) 帐户添加远程而git remote add ac2 ac2.github/yoursecondaccount/rep.git 不是推送使用git push ac2 master这将上传到第二个 (ac2) 帐户。

检查它是否添加了远程使用git remote -v,并以防万一您是否要删除任何人,而不是使用git remote rm originorigin 是您添加的远程。

希望这些信息对遇到同样问题的其他人有所帮助。

再次感谢@VonC

于 2012-11-26T15:21:03.527 回答
2

为了考虑到您的配置,您需要Host在远程地址中使用其名称:

git remote add origin ac2.github.com:myaccount/my

如果您已将HOME环境变量(在 Windows 上默认未定义,但在使用msysgitgit-cmd.bat时已定义)定义到您拥有 .ssh 目录及其id_rsa_ac2私钥和公钥的目录id_rsa_ac2.pub,则它会起作用的。

于 2012-11-25T18:28:10.260 回答
2

这是一个脚本,用于自动将两个 GitLab 帐户添加到您的设置中。

设置-gitlab.sh

#!/bin/bash

# VERIFIED FOR FEDORA 27 MATE (Likely to work in others distros)
# Multi Account SSH for GitLab/OpenSSH Setup.
ROOT=root
if (( whoami == $ROOT ))
    then 
    echo "Run as standard user"
elif [[ -z $1 || -z $2 ]]
    then
    echo "command usage: setup-gitlab.bash workemail@domain.com homeemail@domain.com"
elif [[ ! $1 =~ .*@.*\..* ]]
    echo "Work email is not in the correct format. Must match regex .*@.*\..*"
elif [[ ! $2 =~ .*@.*\..* ]]
    echo "Home email is not in the correct format. Must match regex .*@.*\..*"
else
    HOMEEMAIL=$1
    WORKEMAIL=$2
    USRNAME=`whomai`

# /home/<username>/.ssh/
# ├── config
# ├── home-gitlab-key
# ├── home-gitlab-key.pub
# ├── known_hosts
# ├── work-gitlab-key
# └── work-gitlab-key.pub

#Executed to match the above directory.
    ssh-keygen -t rsa -C "$WORKEMAIL" -b 4096 -f work-gitlab -N ""
    ssh-keygen -t rsa -C "$HOMEEMAIL" -b 4096 -f home-gitlab -N ""

# Agent Configuration Setup (.ssh/config)
    cat >> ~/.ssh/config <<EOF
Host gitlab-work
  HostName gitlab.com
  User git
  IdentityFile /home/$USRNAME/.ssh/work-gitlab-key

Host gitlab-home
  HostName gitlab.com
  User git
  IdentityFile /home/$USRNAME/.ssh/home-gitlab-key
EOF

# Agent Setup (potentially optional???)
    cat >> ~/.bashrc <<'EOF'
eval "$(ssh-agent -s)"
for i in `ls ~/.ssh/*.pub` ; do ssh-add ${i::-4} ; done
EOF

    . .bashrc

fi

运行脚本后,您需要将创建的两个公钥的内容分别复制到每个 GitLab 帐户。

另请注意,使用时应按如下方式git clone git@gitlab.com:<account>/<project>.git更换。gitlab.com

git clone git@gitlab-home:<account>/<project>.git

git clone git@gitlab-work:<account>/<project>.git

分别。

于 2017-12-23T03:42:05.947 回答
0

我正在使用这个脚本,它可以切换缩进和其他所有必要的东西,比如 git 设置

https://gist.github.com/milosjanda/a86ebc039293f22fabe723024ec42b46

if [[ -f ~/.ssh/.work ]]; then
  echo "swith to HOME"
  # mv ~/.ssh/id_rsa ~/.ssh/work; mv ~/.ssh/home ~/.ssh/id_rsa
  rm ~/.ssh 2> /dev/null
  ln -s ~/.ssh-work/home ~/.ssh
  git config --global user.email "my.name@gmail.com"
else
  echo "swith to WORK"
  # mv ~/.ssh/id_rsa ~/.ssh/home; mv ~/.ssh/work ~/.ssh/id_rsa
  rm ~/.ssh 2> /dev/null
  ln -s ~/.ssh-work/work ~/.ssh
  git config --global user.email "my.name@company.eu"
fi

# Delete all identities from ssh-agent
ssh-add -D

# Add new identity to ssh-agent
ssh-add
于 2020-07-26T16:07:17.390 回答