Передача опций ssh ​​в git clone - PullRequest
76 голосов
/ 14 октября 2011

Я пытаюсь запустить git clone без ssh, проверяя ключ хоста хранилища.Я могу сделать это из ssh так:

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@host

Есть ли способ передать те же параметры ssh команде git clone?

Редактировать: есть ограничение, которое я могу 't изменить ~/.ssh/config или любые другие файлы на этом компьютере.

Ответы [ 7 ]

110 голосов
/ 15 февраля 2015

Недавно выпущенный git 2.3 поддерживает новую переменную "GIT_SSH_COMMAND", которую можно использовать для определения команды WITH параметров.

GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" git clone user@host

$GIT_SSH_COMMAND имеет приоритет над $GIT_SSH и является интерпретируется оболочкой, что позволяет включен.

41 голосов
/ 14 октября 2011

Добавьте их к вашему ~/.ssh/config:

Host host
    HostName host
    User user
    SshOption1 Value1
    SshOption2 Value2

Запись Host - это то, что вы указываете в командной строке, а HostName - это истинное имя хоста. Они могут быть одинаковыми, или запись Host может быть псевдонимом. Запись User используется, если вы не указали user@ в командной строке.

Если вам необходимо настроить это в командной строке, установите переменную среды GIT_SSH, чтобы она указывала на сценарий с вашими параметрами в нем.

25 голосов
/ 20 июля 2016

Другая опция, созданная для указания различных ключей, - git config core.sshCommand с git 2.10 + (3 квартал 2016 г.).

Это альтернатива переменной среды, описанной в Boris * * 1006.* ответ )

См. коммит 3c8ede3 (26 июня 2016 г.) Нгуен Тхай Нгёк Дуй (pclouds) .
(Объединено Junio ​​C Hamano - gitster - в commit dc21164 , 19 июля 2016 г.)

Новая переменная конфигурации core.sshCommand был добавлен, чтобы указать, какое значение для GIT_SSH_COMMAND использовать для репозитория.

Подобно $GIT_ASKPASS или $GIT_PROXY_COMMAND, мы также сначала читаем из файла конфигурации, а затем возвращаемся к $GIT_SSH_COMMAND.

Это полезно для выбора различных закрытых ключей для одного и того же хоста (например, github)

core.sshCommand:

Если эта переменная установлена, git fetch и git push будет использовать указанную команду вместо ssh, когда им необходимо подключиться к удаленной системе.
Команда в той же форме, что и GIT_SSH_COMMAND переменная окружения и переопределяется, когда установлена ​​переменная окружения.

Это означает, что git clone может быть:

cd /path/to/my/repo
git config core.sshCommand 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no' 
# later on
git clone host:repo.git

Если вы хотите применить это для все репозитории, поскольку user1300959 добавляет в комментарии , вы бы использовали глобальную конфигурацию.

git config --global core.sshCommand 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
18 голосов
/ 16 января 2014

Вот хитрый пример того, как передать аргументы ssh с помощью переменной GIT_SSH:

$ echo 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $*' > ssh
$ chmod +x ssh
$ GIT_TRACE=1 GIT_SSH="$PWD/ssh" git clone user@host

Примечание. Над строками находятся командные строки терминала, которые вы должны вставить в свой терминал.Он создаст файл ssh , сделает его исполняемым и выполнит его.

Если вы хотите передать опцию закрытого ключа, отметьте Как сказатьgit какой закрытый ключ использовать? .

4 голосов
/ 23 августа 2017

Я думаю, что обновление git до версии> = 2.3 и использование GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" git clone user@host - это вариант ставки, но если это невозможно, @ josh-lee дал хороший вариант, но, пожалуйста, обновите свой ответ с отступом в файле конфигурации ssh.

Host host
    HostName host
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null
1 голос
/ 09 июля 2019

Настройка уровня репозитория без влияния на настройки уровня системы

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

1. Клонируйте хранилище, используя подход GIT_SSH_COMMAND.

GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" git clone ssh://url

2. После клонирования перейдите в каталог хранилища.

cd repo-dir

3.Установите core.sshCommand конфигурацию, чтобы все будущие вызовы можно было просто выполнить с помощью команд git, как обычно, но с внутренним использованием предоставленных параметров git.

git config core.sshCommand 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
0 голосов
/ 20 марта 2018

Эта проблема была исправлена ​​путем выполнения следующих шагов в Window machine: -

  • Создайте файл конфигурации в папке C: \ Users \ username.ssh.

  • добавить следующую строку в файл конфигурации.

    host <HOST>
    hostname <HOSTNAME>
    user <USER_NAME>
    IdentityFile ~/.ssh/id_rsa
    IdentitiesOnly yes
    port <PORT_NUMBER>
    KexAlgorithms +diffie-hellman-group1-sha1
    
  • затем повторите попытку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...