Как использовать другой закрытый ключ SSH для команд Git Shell
Использование ключей SSH более безопасно, чем пароли, и это относится и к Git. Однако, в отличие от пароля, изменить ключ SSH или управлять несколькими ключами сложнее. Однако, отредактировав конфигурацию SSH, вы можете подключиться к нескольким репозиториям Git с разными ключами.
Как SSH работает с Git?
Git не просто использует ваш закрытый ключ для аутентификации, когда вы используете SSH вместо HTTPS, — он фактически устанавливает реальное SSH-соединение с удаленным сервером. Он делает это автоматически, поэтому вы можете не знать, какие команды он выполняет, но внутри он использует ssh
.
Поскольку он использует команду ssh
по умолчанию, он будет действовать так, как будто вы только что запустили его самостоятельно, и использовать ключ по умолчанию в ~/.ssh/id_rsa
. Вероятно, это не то, что вам нужно, если вы читаете это здесь, поэтому, чтобы изменить это, вам нужно отредактировать конфигурацию SSH, а не Git.
Создание нового SSH-ключа
Вам понадобится один, чтобы сделать это в первую очередь, и сделать это довольно легко. Просто запустите ssh-keygen
и укажите имя нового ключа с помощью флага -f
. При этом будут созданы закрытый и открытый ключи с расширением .pub
.
ssh-keygen -t rsa -f ~/.ssh/github
Редактирование ~/.ssh/config
Конфигурационный файл SSH позволяет настроить «Хосты», которые будут соответствовать тому, к чему вы подключаетесь, и разрешить изменение файла, который использует ssh
.
Host github Hostname github.com IdentityFile ~/.ssh/id_rsa.github IdentitiesOnly yes
Это позволит вам использовать ключ SSH, отличный от вашего основного, для всех запросов, идущих на github.com
, но что, если вы хотите использовать два разных ключа для разных репозиториев Git? Например, один для вашей рабочей учетной записи и один для вашей личной учетной записи.
Ну, вам нужно определить две конфигурации с разными именами, используя один и тот же хост:
Host personal Hostname github.com IdentityFile ~/.ssh/githubpersonal IdentitiesOnly yes Host work Hostname github.com IdentityFile ~/.ssh/githubwork IdentitiesOnly yes
Обычно это приводит к конфликтной конфигурации, но Git позволяет обойти это. Если у вас есть удаленный репозиторий, такой как Github, связанный с вашим локальным репозиторием, удалите его:
git remote remove origin
Затем вместо того, чтобы добавлять github.com
в качестве удаленного, замените его именем хоста в файле конфигурации SSH. Git распознает это и будет использовать этот SSH-хост для подключения. Вы можете установить отдельные хосты для каждого репозитория.
git remote add origin git@personal:username/repository.git
Ручное переопределение
Если вы не хотите возиться с конфигурацией SSH или просто хотите временно переопределить ее, Git также предоставляет переменную среды GIT_SSH_COMMAND
. Ты можешь
GIT_SSH_COMMAND='ssh -i ~/.ssh/github -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
Любые команды Git, которые вы запускаете впоследствии в том же сеансе оболочки, будут использовать эту команду SSH вместо команды по умолчанию. Вы также можете установить совершенно другой двоичный файл SSH с помощью GIT_SSH
.