2

実行中

$expect filename.exp user pwd ip

エラーが発生しました

「ssh -l user ip」を実行できませんでした:そのようなファイルまたはディレクトリはありません

の内容は次のfilename.expとおりです。

#!/opt/sfw/bin/expect -D

set OMC_Usr  [lindex $argv 0]
set OMC_Pwd  [lindex $argv 1]
set OMC_IP  [lindex $argv 2]

set cmd "ssh -l $OMC_Usr $OMC_IP"
spawn $cmd
expect "Password:"
send "$OMC_Pwd\r"
interact

続行するのを手伝ってください
ありがとう...

4

1 に答える 1

3

問題はspawn、標準のTclコマンドと同様に、コマンドとその引数を複数のTcl引数として渡す必要があることexecです。修正はこれを直接行うことです:

spawn ssh -l $OMC_Usr $OMC_IP

または、必要に応じて(Tcl 8.5を使用している場合):

set cmd "ssh -l $OMC_Usr $OMC_IP"
spawn {*}$cmd

または、8.4以前をお持ちの場合:

eval spawn [lrange $cmd 0 end]

しかし、これをしないでください:

eval spawn $cmd

ユーザー名(またはIPアドレス)にTclメタ文字が含まれていると、予期せず壊れてしまうためですが、それはほとんどありません。


もちろん、本当の解決策は、RSAキーペアを設定し、ssh-agentそれを管理するために使用することです。このように、コマンドラインでパスワードを渡す必要はありません。プロセスのコマンドラインはプロセスに関する公開情報であるため、これは重要です。本当に。ps -efwwあなたはそれをのような些細なもの(またはあなたのOSの同等のもの)で見つけることができます。環境変数も同様に安全ではありません。それらを表示するオプションもありpsます。

于 2010-09-17T08:11:27.737 に答える