1

'expect'を使用してsshパスワード認証を自動化しています。SunOSでスクリプトを実行すると、以下のスクリプトが完了すると、生成されたsshプロセスが強制終了されることがわかります。これはLinuxには当てはまりません。どうすればそれを回避できますか?どういうわけかSIGCHLD信号を無視する必要がありますか?生成されたプロセスが成功したかどうかをこのスクリプトで判断し、エラーがあれば報告する方法はありますか?

#!/usr/local/bin/expect -f

set password blah-blah
spawn ssh -NfL 8002:<test domain>:22 test@testdomain.com
expect "* password:*"
send -- "$password\r"
send -- "\r"
expect EOF

-Karthik

4

2 に答える 2

1

ssh コマンドをバックグラウンドで実行する代わりに、expect スクリプトをバックグラウンドで実行できます。

#!/usr/local/bin/expect -f

if {[fork] != 0} exit
disconnect

set password blah-blah
spawn ssh -NL 8002:localhost:22 test@testdomain.com
expect {
    EOF {exit 1}
    "assword:" {}
}
send -- "$password\n"
send -- "\n"
expect EOF
wait

Linuxで動作します。少なくともセットアップ段階では、それを止めることはより困難です。kill -9期待スクリプトを停止する必要がありました。おそらくsshプロセスも強制終了する必要があります。

于 2010-08-04T09:37:50.587 に答える
1

ssh-keys を使用する場合、シェル スクリプトでパスワードをコーディングする必要はありません。

キーをパスフレーズで暗号化し、キーssh-agentを管理するために使用することもできます。朝にキーのロックを解除し、トンネルを開始し、昼食に向かうときにキーを忘れ、午後にキーのロックを解除します。夜家に帰るとまた忘れてしまいます。リモート マシンへのオンディスク マジック ゲートウェイはありません。

于 2010-08-04T09:34:50.083 に答える