GitHub: настройка нескольких учетных записей
Уже более 3 часов я пытаюсь настроить несколько учетных записей для GitHub и немного устал. Я испробовал почти все возможные способы описания здесь, github и статей, и ни одна из них не сработала. Я совершенно новичок в github и Unix. Так что нужна ваша помощь, чтобы это исправить. Здесь под тем, что я делаю
Я использую Windows 7 и установил два ключа SSH для двух разных учетных записей.
- id_rsa
- 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 ответ сработал и добавив окончательный код в качестве моего ответа, если кто-то хочет использовать.
3 ответа
Чтобы ваш конфиг был принят во внимание, вы должны использовать его Host
имя в вашем удаленном адресе:
git remote add origin ac2.github.com:myaccount/my
Если вы определили HOME
переменная окружения (которая не определена по умолчанию в Windows, но определяется, если вы используете msysgitgit-cmd.bat
) в каталог, в котором у вас есть каталог.ssh, с его id_rsa_ac2
закрытый ключ и id_rsa_ac2.pub
открытый ключ, тогда он будет работать.
Таким образом, согласно ответу @VonC здесь, что я сделал.
- Я сгенерировал ключ ssh для другой учетной записи и добавил с id_rsa_ac2 (где ac2 для второй учетной записи)
- Чем просто перепроверил либо работает
ssh -T ac2.github.com
- Созданный файл конфигурации (без расширения) в каталоге /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 origin
где origin - ваш добавленный пульт.
Надеюсь, что эта информация поможет другим, кто сталкивается с той же проблемой.
Еще раз спасибо @VonC
Вот скрипт для автоматизации добавления двух учетных записей GitLab в вашу настройку.
https://gitlab.com/procyclinsur/Fedora-Environment
#!/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
соответственно.
Я использую этот скрипт, этот переключатель отступа и другие необходимые, такие как настройка 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