SSHの既知のホストをbashスクリプトに追加する方法は?


13

Webアプリケーションをデプロイできる新しいサーバーをプロビジョニングするbashスクリプトを作成しています。私がいつもしなければならないことの1つは、GitHubがを使用する既知のホストであるということssh git@github.comです。このプロセスをbashスクリプトで自動化し、べき等の方法で自動化するにはどうすればよいですか?

回答:


17

簡単な方法は、このようなことをすることです。

ssh-keyscan remote_server >>~/.ssh/known_hosts

このボックスが新品の場合、ssh-keyscan~/.sshを実行する前にディレクトリを作成する必要がある場合があります。

ssh-keyscanは任意の数のホスト名を取得できることに注意してください。可能な限りすべてのキーを取得します。


1
PS-プロビジョニングには、bashスクリプトの代わりにパペットのようなものを使用する必要があります。人形の場合、これはsshkeyリソースで簡単に処理できます。また、known_hostsファイルを管理する方法のためのエン一斉この質問を参照してくださいserverfault.com/a/416782/984
Zoredache

2
それは確かに私には良さそうに聞こえましたが、人形と競合他社に数時間を費やした後、私は急いでbashスクリプトと正気に戻りました。これらのツールが直感的であれば、どうやら直感がつかないようです。YMMV。
ロン・バーク

bashを使用します。パペットやアンシブルなど、さまざまなバージョンで常に問題に遭遇しています。私たちは常にbashに戻ります...現在このように運営されている3社は、bashは常に信頼できます。
リゲマー

4

新しいキーの受け入れを自動化しようとしていますか?その場合、-oStrictHostKeyChecking = noを使用できます。
中間者攻撃に対して完全にオープンになっているため、そうすることは非常に悪い考えです。

より良いオプションは、known_hostsファイルを管理し、新しいサーバーをプロビジョニングするときにそのファイルを再利用することです。githubに貼り付け、そのファイルをダウンロードする簡単なスクリプトを書いてからgithubに投入します。

厳密なホストキーチェックは良いことです。


「known_hostsファイルの管理」について詳しく説明してください。私はそれがやりたいことだと思いますが、ファイルを表示したとき、コンテンツはハッシュ/キーのようなものであり、手動で管理するためのものではありませんでした。
アンドリュー

2
新しいサーバーをプロビジョニングし、githubに手動でsshを実行します。プロンプトが表示されたら、ホストキーを受け入れます。ログアウト。〜/ .ssh / known_hostsを、新しくプロビジョニングされたサーバーから別の場所にコピーします(github、Webサーバー、入手できる限り問題ありません)。次回サーバーをプロビジョニングするときは、githubに送信する前にそのファイルをコピーして戻します。ファイルを編集する必要はありません。
ユニックス

これは私の答えより安全です(より安全です)。しかし、yoonixの答えをさらに改善するには、「ssh-keyscan github.com」を解析し、返されるキーを〜/ .ssh / known_hostsに保存して、更新が必要なファイルのどこかに静的ではないようにします。
Sirex

それも機能しますが、私はそれをより良いとは思わないでしょう。毎回新しいホストキーを取得する場合、中間者攻撃に備えている可能性があります。
ユニックス

1
最後のコメントを明確にするには(編集するには遅すぎます):ホストをプロビジョニングするたびに新しいホストキーを取得することは、機能的にStrictHostKeyChecking = noを設定することと同じです。どちらの場合も、プロビジョニングするたびに送信されるキーを盲目的に信頼しています。MITM攻撃の可能性が低いと思われる場合は、これら 2つの記事を読んでください。Githubは大きなターゲットになります。
ユニックス

1

私は質問を理解しているかわかりませんが、known_hostプロンプトを無視するか、完全に回避したいと思います。その場合:

ssh -o StrictHostKeyChecking = no

または他の提案:http : //www.joedog.org/2012/07/ssh-disable-known_hosts-prompt/


GitHubホストキーを受け入れる非対話型の方法が必要です(これはbashスクリプトで発生するため)。
アンドリュー

その後、これは動作します-キーを受け入れませんが、完全に無視します。Yoonixの答えは優れている
Sirex
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.