Как указать закрытый SSH-ключ для использования при выполнении команды оболочки на Git? - PullRequest
886 голосов
/ 30 декабря 2010

Возможно, это довольно необычная ситуация, но я хочу указать закрытый SSH-ключ для использования при выполнении команды shell (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, который использует указанный закрытый ключ, но это локальная команда. Возможно ли это?

Ответы [ 24 ]

0 голосов
/ 14 февраля 2019

Вот хак с ssh-ключом, который я нашел при поиске решения этой проблемы:

Например, у вас есть 2 разных набора ключей:

key1, key1.pub, key2, key2.pub

Сохраните этиключи в вашем .ssh каталоге

Теперь в вашем псевдониме .bashrc или .bash_profile добавьте эти команды

alias key1='cp ~/.ssh/key1 id_rsa && cp ~/.ssh/key1.pub id_rsa.pub'

alias key2='cp ~/.ssh/key2 id_rsa && cp ~/.ssh/key2.pub id_rsa.pub'

Вуаля!У вас есть ярлык для переключения клавиш в любое время!

Надеюсь, это работает для вас.

0 голосов
/ 31 декабря 2018

Если вы похожи на меня, вы можете:

  • Организовать ваши ssh-ключи

  • Упростить команды git clone

  • Обрабатывать любое количество ключей для любого количества репозиториев.

  • Сократить объем обслуживания ssh-ключей.

Я храню свои ключи в своем каталоге ~/.ssh/keys.

Я предпочитаю соглашение по конфигурации.

Я думаю, что код - это закон;чем проще, тем лучше.

ШАГ 1 - Создание псевдонима

Добавьте этот псевдоним в свою оболочку: alias git-clone='GIT_SSH=ssh_wrapper git clone'

ШАГ 2 - Создание сценария

Добавление этого сценария ssh_wrapper к вашей PATH:

#!/bin/bash
# Filename: ssh_wrapper

if [ -z ${SSH_KEY} ]; then
    SSH_KEY='github.com/l3x'  # <= Default key
fi
SSH_KEY="~/.ssh/keys/${SSH_KEY}/id_rsa"
ssh -i "${SSH_KEY}" "$@"

ПРИМЕРЫ

Используйте ключ github.com/l3x:

KEY=github.com/l3x git-clone https://github.com/l3x/learn-fp-go

В следующем примере также используется ключ github.com / l3x (по умолчанию):

git-clone https://github.com/l3x/learn-fp-go

Использованиеключ bitbucket.org/lsheehan:

KEY=bitbucket.org/lsheehan git-clone git@bitbucket.org:dave_andersen/exchange.git

NOTES

Измените значение по умолчанию SSH_KEY в скрипте ssh_wrapper на то, что вы используете большую часть времени.Таким образом, вам больше не нужно использовать переменную KEY большую часть времени.

Вы можете подумать: «Эй! Многое происходит с псевдонимом, скриптом и некоторым каталогом ключей», нодля меня это условность.Почти все мои рабочие станции (и серверы в этом отношении) настроены одинаково.

Моя цель здесь - упростить команды, которые я выполняю регулярно.

Мои соглашения, например скрипты Bash, псевдонимы,и т.д., создайте согласованную среду и помогите мне упростить задачу.

Поцелуи и имена имеют значение.

Дополнительные советы по проектированию можно найти в Главе 4 SOLID Design in Go отмоя книга: https://www.amazon.com/Learning-Functional-Programming-Lex-Sheehan-ebook/dp/B0725B8MYW

Надеюсь, это поможет.- Lex

0 голосов
/ 21 августа 2017

Я использую zsh, и различные ключи загружаются в ssh-agent моей оболочки zsh автоматически для других целей (например, для доступа к удаленным серверам) на моем ноутбуке.Я изменил ответ @ Ника и использую его для одного из моих репозиториев, которое нужно часто обновлять.(В данном случае это моя dotfiles, и мне нужна одинаковая и последняя версия на всех моих машинах, где бы я ни работал.)

bash -c 'eval `ssh-agent`; ssh-add /home/myname/.dotfiles/gitread; ssh-add -L; cd /home/myname/.dotfiles && git pull; kill $SSH_AGENT_PID'
  • Создать ssh-agent
  • Добавить доступный только для чтения ключ к агенту
  • Сменить каталог на мое git-репо
  • Если cd для репозитория успешно, вытащить из удаленного репо
  • Kill spawned ssh-агент.(Я бы не хотел, чтобы вокруг было много агентов.)
0 голосов
/ 31 октября 2017

Если номер порта SSH не 22 (по умолчанию), добавьте Port xx в ~/.ssh/config

В моем случае (синология),

Host my_synology
    Hostname xxxx.synology.me
    IdentityFile ~/.ssh/id_rsa_xxxx
    User myname
    Port xx

Затем клонируйте, используя название хоста в конфигурации. ("my_synology". чтобы избежать @chopstik "*")

git clone my_synology:path/to/repo.git
...