リモート システムにログインしてコマンドを実行するために必要なスクリプトが必要です。このスクリプトは、root アカウントにパスワードを提供することを除いて機能します。ルート パスワードにドル記号が含まれているため、うまく機能していないようです。ここにコードがあります
#!/usr/bin/expect
set timeout 3
set username "root"
set password "Pas$word"
set hostname [lindex $argv 0]
log_user 0
send_user "\n#####\n# $hostname\n#####\n"
spawn ssh -q -o StrictHostKeyChecking=no $username@$hostname
expect {
timeout { send_user "\nFailed to get password prompt\n"; exit 1 }
eof { send_user "\nSSH failure for $hostname\n"; exit 1 }
"*assword"
}
send "$password\r"
expect {
timeout { send_user "\nLogin failed. Password incorrect.\n"; exit 1}
"*\$ "
}
send_user "\nPassword is correct\n"
expect "$ " { send "ls" }
パスワードにドル記号が含まれていない資格情報を提供するときにこれが機能することを確認しましたが、root アカウントでは機能しません。常にLogin failed. Password incorrect
タイムアウト エラーが発生します。パスワードの変更はオプションではありません。\
次のように、パスワード定義にエスケープ文字を指定しようとしました。
set password "Pas\$word"
そして、私は同じ結果を得ます...私が間違っていることについてのアイデアはありますか?
ありがとう
編集 私が言ったように。私はすでに $ 文字をエスケープしようとしました。しかし、明確にするために、変数にパスワードが正しく含まれていることを確認するために、スクリプトの起動時にパスワードのprintステートメントを追加しました...変更は次のとおりです。
set password "Pas\$word"
...
send_user "\n#####\n# $hostname\n#####\n"
send_user "Using password: $password\n"
...
コンソール出力は次のとおりです。
njozwiak@ubuntu:~$ ./ssh_ls.sh 192.168.5.93
#####
# 192.168.5.93
#####
Using password: Pas$word
Login failed. Password incorrect.