2016-06-07 4 views
9

Можно ли получить доступ (fetch/push) удаленный репозиторий с использованием ssh и файла идентификации (с закрытым ключом) без добавив запись в файл ~/.ssh/config, такие как:Git: доступ к удаленному репозиторию через ssh с использованием файла ключей, но без использования ~/.ssh/config

Host tingle 
    HostName 111.222.333.444 
    User git 
    IdentityFile c/tmp/my_id_rsa 

Все отлично работает при настройке файла ~/.ssh/config. Однако у нас есть скрипт, который клонирует из удаленного репо, проверяет, начинает тестирование, фиксирует результаты и толкает их. Скрипт должен запускаться на любой машине, не касаясь конфигурационного файла ssh.

+0

Не могли бы вы создать собственный файл конфигурации с тем, что у вас есть выше, которое используется только там, где оно вам нужно (например, 'ssh tingle -F my_custom_config')? – Ownaginatious

+0

Этот ответ может быть полезен. Я наткнулся на него, ища что-то подобное на этой неделе. http://stackoverflow.com/a/4565746/1789724 – austin

+0

Отправляй сообщение здесь: > http://stackoverflow.com/questions/7927750/specify-an-ssh-key-for-git-push-for-a -given-domain – prateek05

ответ

4

Вы можете переопределить переменную $GIT_SSH среды использовать свой собственный закрытый ключ:

Во-первых, создать сценарий оболочки. Пусть предположим, что мы называем его gitssh.sh:

#!/bin/bash 
ssh -i /path/to/mykey "[email protected]" 

Затем точка $GIT_SSH к нему:

export GIT_SSH=/path/to/gitssh.sh 

Теперь, когда вы запускаете команду Git через SSH, он будет заменен с этим сценарием, и информирующий о вашем ключ.

6

Вы можете использовать переменную $GIT_SSH, см. documentation, чтобы установить программу, которая вызывается вместо ssh.

Таким образом, вы можете, например. у GIT_SSH=/my/own/ssh git clone https://my.own/repo.git

Адаптировать содержание /my/own/ssh вашей собственной потребности, например .:

#!/bin/bash 
# Wrapper for ssh, to use identity file and known hosts file 
exec /usr/bin/ssh -i /my/own/identity_file-o UserKnownHostsFile=/my/own/hosts.file "[email protected]" 

Насколько я знаю, что это в настоящее время единственный способ сделать это без довольно неопрятный манипуляций пути.

+1

Это работает. Особенно удобно, если наш скрипт создает собственный файл конфигурации хоста и добавляет в оболочку: exec/usr/bin/ssh - F our_ssh_host "$ @" –

3

Следующая следует сделать трюк

GIT_SSH_COMMAND="ssh -i c/tmp/my_id_rsa" git push 

Это позволяет добавлять параметры выполнения SSH без необходимости дополнительного файла сценария.

В зависимости от вашего сценария вы можете настроить это, определив и экспортировать переменные окружения GIT_SSH_COMMAND до фактического исполнения мерзавца или использовать if и т.д., чтобы использовать его только когда вы общаетесь с tingle

В файле конфигурация вы также упоминаете пользователя и хост. Это уже должно быть частью удаленного определения git. Если вам все же необходимо переопределить это, вы можете добавить их в указанное выше определение команды.

Одно замечание: команда, указанная выше, не проверяет, какой хост на самом деле вызывается git. Но если вы в отчаянии, вы можете попытаться построить встроенный сценарий оболочки с помощью этого «трюка», который проверяет имя хоста и имитирует ограничение хоста конфигурационного файла ;-).

В качестве стартера, который может быть выглядеть следующим образом: GIT_SSH_COMMAND="bash -c \"if [ \\\"$1\\\" = \\\"[email protected]\\\" ] ; then ssh -i c/tmp/my_id_rsa [email protected] ; else ssh [email protected] ; fi \" -- " git push

Я не проверял это и быть в курсе экранированием ;-). Это для отчаянного.

2

Если вы хотите использовать пользовательского ключ SSH вы можете попробовать это:

ssh-agent bash -c 'ssh-add /path/to/your/id_rsa; git clone [email protected]:repo' 

Таким образом, вы не нужно писать/редактировать любой файл конфигурации или изменить окружающую среду.

-1

Вы можете использовать файл .pem создать безопасное соединение с сервером мерзавца

SSH -i "yourfile.pem" yourHostName.com

.pem не что иное, как у файл сертификата, который содержит информацию о ключе.

  • Первый шаг - создать ключевую пару и файл PEM.
  • Следующий шаг - загрузить сертификат на ваш удаленный сервер в командной строке с использованием SSH, впервые с паролем.
  • Последний шаг, тестирование соединения клиента с сервером без использования пароля.

Отъезд http://www.beginninglinux.com/home/server-administration/openssh-keys-certificates-authentication-pem-pub-crt! вы можете найти более подробную информацию о методе здесь.

Смежные вопросы