Как да задам частния SSH ключ, който да се използва при изпълнение на shell команда в Git?

Може би е доста необичайна ситуация, но искам да задам частен SSH ключ, който да се използва при изпълнение на шел (git) команда от локалния компютър.

В общи линии това е следното:

git clone git@github.com:TheUser/TheProject.git -key "/home/christoffer/ssh_keys/theuser"

Или още по-добре (на Ruby):

with_key("/home/christoffer/ssh_keys/theuser") do
  sh("git clone git@github.com:TheUser/TheProject.git")
end

Виждал съм примери за свързване към отдалечен сървър с Net::SSH, който използва определен частен ключ, но това е локална команда. Възможно ли е това?

Решение

Нещо подобно би трябвало да работи (предложено от orip):

ssh-agent bash -c 'ssh-add /somewhere/yourkey; git clone git@github.com:user/project.git'

Ако предпочитате подкорпуси, можете да опитате следното (макар че е по-нестабилно):

ssh-agent $(ssh-add /somewhere/yourkey; git clone git@github.com:user/project.git)

Git ще извика SSH, който ще намери своя агент чрез променливата на средата; той на свой ред ще има зареден ключ.

Алтернативно, задаването на HOME също може да свърши работа, при условие че сте готови да настроите директория, която съдържа само директория .ssh като HOME; тя може да съдържа или identity.pub, или конфигурационен файл, задаващ IdentityFile.

Коментари (17)

Съдържание на my_git_ssh_wrapper:

#!/bin/bash

ssh -i /path/to/ssh/secret/key $1 $2

След това можете да използвате ключа, като направите:

GIT_SSH=my_git_ssh_wrapper git clone git@github.com:TheUser/TheProject.git
Коментари (5)

Можете да използвате променливата на средата GIT_SSH. Но ще трябва да обхванете ssh и опциите в шел скрипт.

Вижте ръководството на git: man git в командния шел.

Коментари (0)