while / forループでSSHパラメーターを使用しないことが予想されます。

while / forループでSSHパラメーターを使用しないことが予想されます。

いくつかのコマンド()を使用して、多くのdmidecodeホストのリモートシステムの詳細を取得しようとしています。expect

expect以下はこの目的に使用するスクリプトです。

while read i; do
{
/usr/bin/expect<<EOF
 spawn ssh "root@$i" dmidecode 
 expect "Password:"
 send "xxxx\r";
 interact
 EOF
  }
 done<iplist 

ただし、ここのコマンドはリモートコンピュータでは実行されません。私は一重引用符、二重引用符、カラットを試しましたが、まだ成功していません。

ここでは、リモートコマンドをパラメータとして実行したいと思います。たとえば、次のようになります。ssh <ip> <remote command>

いくつかのアドバイスをしてください。一部のパラメーターが欠落している可能性があります。助けてください。

ベストアンサー1

while1つの単純化はバグがあり、遅いシェルループを取り除くことですstdininteractつまり、入力ファイルがexpectスクリプトのTCLコードに渡され、読み込まれます。

#!/usr/bin/expect

if {[llength $argv] != 1} {
    puts stderr "Usage: $0 iplist-file"
    exit 1
}

set ipfh [open [lindex $argv 0]]

while {[gets $ipfh ip] >= 0} {
    spawn ssh root@$ip dmidecode
    expect "Password:"
    send "Hunter2\r";
    interact
}

おすすめ記事