- ベストアンサー
シェルスクリプトでsshの初回ログイン処理をしない
以下のような処理はシェルスクリプトで実装可能でしょうか。 【host.txt】 aaaホスト bbbホスト cccホスト 【test.sh】 for (【host.txt】の一覧) { if (ホストに対してAre you sure you want to continue connecting (yes/no)?と聞いてきた) { # ssh初回ログイン時 } else { # ssh初回ログインではない } }
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No1です。 回答に書いたとおり、-o StrictHostKeyChecking=no というのは、あくまで、 >sshの初回接続したホストで処理を止めずに次のホストに対して処理を実行したいということです。 というNo2の補足に対してのものです。 初回ログインと二回目以降のログインを判断したいと言うことなら、No2の方の回答くらいしか無いと思います。 あるいは、初回ログイン時に、サーバー側に目印のファイルを作るなりして、それの有無を判断するか。
その他の回答 (3)
- notnot
- ベストアンサー率47% (4900/10359)
No1です。 >sshの初回接続したホストで処理を止めずに次のホストに対して処理を実行したいということです。 質問文からは上記は全く読み取れませんね。 途中で止めたくないと言うことなら、ssh に、-o StrictHostKeyChecking=no というオプションをつけると聞いてきません。
補足
sshに「-o StrictHostKeyChecking=no」を付けた場合を 試していないため憶測ですが、 以下のif文の条件に戻り値等を指定できるのでしょうか? if (条件) { # ssh初回ログイン時 } else { # ssh初回ログインではない } 上記の場合だと初回ログイン時は処理を中断して次のホストに処理が進むため 判定できない気がします。
- Wr5
- ベストアンサー率53% (2173/4061)
host.txtに列挙されているホスト名が~/.ssh/known_hosts 内にあるかどうか…で、過去に接続したことがあるかどうかは判定できると思われますがどうですかね? もっとも、ホスト側の鍵ファイルが変更されていたらその限りではありませんが。
補足
No1の捕捉にも書きましたが、 sshの初回接続したホストで処理を止めずに次のホストに対して処理を実行したいということです。
- notnot
- ベストアンサー率47% (4900/10359)
>ホストに対してAre you sure you want to continue connecting (yes/no)?と聞いてきた これはどういう意味ですか?
補足
説明不足でした。 シェル内でコマンド「ssh host」と実行した場合に初回接続で上記の質問が返ってきます。 シェルを自動実行し、途中で処理を止めずに最後まで実行したいため、 質問が返ってきた場合に次の処理を実行するということです。
補足
目印のファイルを作成して、それを確認するのは難しいです。 なので、No2の方の方法で試してみようと思います。