Передача параметров ssh в git клон
Я пытаюсь запустить git clone
без проверки ssh на ключ хоста репозитория. Я могу сделать это из ssh следующим образом:
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no [email protected]
Есть ли способ передать те же параметры ssh команде git clone?
Изменить: существует ограничение, которое я не могу изменить ~/.ssh/config
или любые другие файлы на этом компьютере.
Ответы
Ответ 1
Добавьте их в свой ~/.ssh/config
:
Host host
HostName host
User user
SshOption1 Value1
SshOption2 Value2
Запись Host
- это то, что вы укажете в командной строке, а HostName
- истинное имя хоста. Они могут быть одинаковыми, или запись Host
может быть псевдонимом. Запись User
используется, если вы не укажете [email protected]
в командной строке.
Если вы должны настроить это в командной строке, установите переменную среды GIT_SSH
, чтобы указать на script с вашими параметрами.
Ответ 2
Недавно выпущенный git 2.3 поддерживает новую переменную "GIT_SSH_COMMAND", которая может использоваться для определения параметров команды WITH.
GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" git clone [email protected]
$GIT_SSH_COMMAND
имеет приоритет над $GIT_SSH
и является интерпретируется оболочкой, что позволяет использовать дополнительные аргументы включен.
Ответ 3
Другая опция, созданная для указания разных ключей, - это git config core.sshCommand
с git 2.10 + (3 квартал 2016 года).
Это альтернатива переменной среды, описанной в ответе Бориса)
См. Коммит 3c8ede3 (26 июня 2016 г.) Нгуен Тхай pclouds
Дуй (pclouds
).
(Объединено Junio C Hamano - gitster
- в коммите 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'
Ответ 4
Вот сложный пример, как передать аргументы 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 [email protected]
Примечание. Над строками находятся терминальные командные строки, которые вы должны вставить в свой терминал. Он создаст файл ssh, сделает его исполняемым и выполнит его.
Если вы хотите передать секретный ключ, пожалуйста, проверьте Как сообщить git, какой секретный ключ использовать?.
Ответ 5
Я думаю, что обновление git до версии >= 2.3 и использование GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" git clone [email protected]
- это вариант ставки, но если это невозможно, @josh-lee дал хороший вариант, но, пожалуйста, обновите свой ответ, отложив ssh config.
Host host
HostName host
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
Ответ 6
Эта проблема была исправлена, выполнив следующий шаг в Windows 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
-
затем попробуйте еще раз.
Ответ 7
Объединяя уже имеющиеся ответы, я выбираю следующие шаги:
1. Клонируйте репозиторий, GIT_SSH_COMMAND
подход 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
конфигурацию core.sshCommand
чтобы все будущие вызовы можно было просто выполнить с помощью команд git, как обычно, но с внутренним использованием предоставленных параметров git.
git config core.sshCommand 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'