1
私はscript.Itだけでリモートホストにログインしてexits.Hereはそれだけで取得するコードはとリモートのsshコマンドを実行することができませんでしスクリプト
#!/usr/bin/expect
set timeout 15
puts "connecting to the storage\n"
set user [lindex $argv 0]
set host [lindex $argv 1]
set pass "root123"
spawn ssh "$user\@$host"
expect {
"Password: " {
send "$pass\r"
sleep 1
expect {
"$ " {
send "isi quota quotas list|grep ramesh\r" }
"$ " {
send "exit\r" }
}
}
"(yes/no)? " {
send "yes\r"
expect {
"$ " { send "ls\r" }
"$ " { send "exit\r" }
"> " {}
}
}
default {
send_user "login failed\n"
exit 1
}
}
です期待し使用してリモートホスト上でコマンドを実行することができません期待しますリモートホストに接続して終了します。 [深い@ host1に:〜] $ ./sshexpect USER1 host2の ストレージに
spawn ssh [email protected]
Password:
host2$
[[email protected]:~]$
を結ぶ間違った構文ですか? 私はtclスクリプトの初心者です。
私はミスを理解し、私は以下の行が -re {\ $ $} を意味しないものを手に入れるのdidntも、なぜ私たちがする必要がありますかput eof スクリプトの最後に – anudeep
'-re'オプションは、デフォルトのグロブパターンの代わりに正規表現パターンを使用します。私は、プロンプトがドル記号で、行末のスペース*であると指定しています。予想にドル記号とスペース、そして他のテキストが表示される場合、それはプロンプトと一致しません。 'expect eof'は基本的に「生成されたプロセスが閉じられるまで待つ」という意味です。ここで厳密には必要ではありませんが、一般的には良い方法です。 –
私はまだそれを試してみました。それは "ログインに失敗しました"と表示され、終了します。 リモートボックスにログインした後、ブランクになり、「login failed」で終了すると、 – anudeep