Поиск по сайту:

Как использовать другой закрытый ключ 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.