2

最近、/etc/hosts ファイルを更新して再フォーマットしました。すべてのシステム (約 1000) を実行して、known_hosts ファイルを更新したいと考えています。期待スクリプトを使用して、RSA 指紋の質問に「はい」を送信することを検討しています。十分に単純です。ただし、これらのシステムのいくつかは私にとってまったく新しいものであり、パスワードが設定されていないことはわかっています。これにより、次の 2 つの可能性が生じます。

  1. 「はい」が RSA 指紋の質問に送信され、サーバーにログインしました。次のホストに移動する前に、終了を送信して接続を閉じる必要があります。または...

  2. 「はい」が RSA フィンガープリントの質問に送信され、現在のパスワードから始めて新しいパスワードを 2 回入力してパスワードを更新するプロンプトが表示されます。パスワードが更新されて次のホストに移動すると、接続は自動的に閉じられます。

私は期待する「if/else」の概念を基本的に理解していると思いますが、それらをネストする方法、より良い方法がある場合、またはそもそも完全にオフベースである場合、完全には理解していません。 .

これは私が今持っているものです:

set file1 [open [lindex $argv 0] r]

set pw1 [exec cat /home/user/.pw1.txt]
set pw2 [exec cat /home/user/.pw2.txt]

while {[gets $file1 host] != -1} {

    puts $host
    spawn -noecho "ssh $host"
    expect {
        "continue connecting"{
            send "yes\r"
            expect {
                "current" {
                    send $pw2\r
                } "New password" {
                    send $pw1\r
                } "Retype new password" {
                    send $pw1\r
                }
            }
        expect "msnyder"
        send "exit\r"
    }
    interact
}

file1 変数は、スクリプトを実行するホストのリストです。

22行目でエラーが発生しているため、正確ではないことはわかっています。しかし、何を修正する必要があるのか​​ わかりません。

4

2 に答える 2

0

おそらく、スクリプトを人間のように実行することを避けて、失敗すると予想される ssh 接続を生成するだけで、ホストの RSA キーを自動的に受け入れ、パスワードの入力を求める必要がなくなります。パスワードを開始する必要がある新しいシステムでは、後でそれを行うことができます。

スクリプトが完成するまで、これを一時的に ~/.ssh/config ファイルに追加してみてください:

Host *
  Protocol 2
  PasswordAuthentication 0
  StrictHostKeyChecking 'no'
  CheckHostIP 'no'
  UserKnownHostsFile ~/.ssh/known_hosts_new

次に、新しい know_hosts_new ファイルがロードされたら、デフォルトの ~/.ssh/known_hosts を置き換えて、構成から UserKnownHostsFile 行を削除できます。

于 2013-09-06T03:19:10.820 に答える