sshオプションをgit cloneに渡す


103

git clonesshでリポジトリホストのキーをチェックせずに実行しようとしています。私はそのようにsshからそれを行うことができます:

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

同じsshオプションをgit cloneコマンドに渡す方法はありますか?

編集:~/.ssh/configそのマシンのファイルやその他のファイルを変更できないという制限があります。


2
あなたがしようとすることは非常に危険であり、おそらくそれを行うべきではありません。ほとんどの場合、リモートSSHサーバーのIDが不適切な場合は、検証を無効にします。SSHを使用して得られたすべてのセキュリティを効果的に無効にし、中間者攻撃に身を任せます。
2017

1
実際、これはたいてい正確にあなたがやりたいことです。内部リポジトリがあります。誰かがそれを偽装できた場合、あなたは困っています。それは「非常に危険」ではありません。実際、ホストキーの帯域外チェックをどのくらいの頻度で行いますか?(あなたはすべきです)。
Graham Nicholls、2018年

回答:


47

それらをあなたに追加してください~/.ssh/config

Host host
    HostName host
    User user
    SshOption1 Value1
    SshOption2 Value2

Hostエントリは、コマンドラインで指定しますものです、そしてHostName真のホスト名です。同じにするHostことも、エントリをエイリアスにすることもできます。このUserエントリはuser@、コマンドラインで指定しない場合に使用されます。

コマンドラインでこれを構成する必要がある場合は、GIT_SSH環境変数を設定して、オプションが含まれているスクリプトを指すようにします。


4
そのマシンのファイルを変更することはできません。そうでなければ、ええあなたのソリューションはうまくいくでしょう。
ダニエル

28
GIT_SSH環境変数を使用します。
ジョシュリー

151

最近リリースされたgit 2.3は、コマンドWITHパラメーターを定義するために使用できる新しい変数「GIT_SSH_COMMAND」をサポートしています。

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

$GIT_SSH_COMMANDはに優先し$GIT_SSH、シェルによって解釈されるため、追加の引数を含めることができます。


前に改行があるべきgit cloneですか、それともコードは正しいですか?
トマーシュZato -復活モニカ

7
これは正しいはずです。改行なしでは、変数は次のコマンドに設定する必要があります。改行を追加する場合、変数をエクスポートする必要がありますが、それも機能するはずです。
ボリス

ありがとう、私はこれに2日間行き詰まっています!
James Gentes

ブーヤ!ありがとうございました。
ジャスパーブルース

git 1.9バージョンでは動作しません
。git1.9の

33

異なるキーを指定するための別のオプションはgit config core.sshCommand、git 2.10 +(2016年第3四半期)です。

これは、Boris回答で説明されている環境変数の代替です)

参照してください3c8ede3コミットにより(2016年6月26日)のグエンタイ・ゴックDuyと(pclouds
(合併によりJunio C浜野- gitster-dc21164コミットし、2016年7月19日)

core.sshCommandリポジトリごとにGIT_SSH_COMMANDが使用する値を指定するために、新しい構成変数が追加されました。

$GIT_ASKPASSまたは$GIT_PROXY_COMMANDと同様に、最初に構成ファイルから読み取り、次ににフォールバックし$GIT_SSH_COMMANDます。

これは、同じホスト(githubなど)を対象とする異なる秘密鍵を選択するのに役立ちます

core.sshCommand:

この変数が設定され、場合git fetchgit 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'

2
あなたがないので、より多くの可能性が高いあなたは、まだレポを持っていないgit cloneこのケースでは、あなたがグローバルGitのsshコマンドを設定することもできます。 -git config --global core.sshCommand ...
iurii

@ user1300959良い点、ありがとうございます。見やすくするため、回答にコメントを含めました。
VonC、2017

これが最良の答えです。
MikeSchinkel

最後の部分ではアポストロフィが不足しています
Luigi Lopez

@LuigiLopez回答を編集できますか?編集内容を確認します。
VonC 2018年

21

GIT_SSH変数を使用して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に伝える方法を確認してください


いいね!質問:どちら$*"$@"仕事に思えます。"$@"もう1つは非推奨のようなので、通常はを使用します。$*この場合に好む理由はありますか?
mh8020

16

システムレベルの設定に影響を与えないリポジトリレベルの構成

すでに利用可能な回答をまとめて、以下の手順を選択します。これにより、構成変更がマシンレベルではなく、作業中のリポジトリのみに影響を与えることが保証されます。私のケースでは、共有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'

1
core.sshCommand上で述べたの素晴らしい使い方。賛成。
VonC

5

私は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

0

この問題は、ウィンドウマシンで次の手順を実行することで修正されました。

  • 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
    
  • その後、再試行してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.