web-dev-qa-db-ja.com

expectを使用してリモートマシンでローカルbashスクリプトを実行する

ローカルシェルスクリプトがあります。次に、このローカルスクリプトをリモートマシンで実行します。もちろんsshを使用できますが、それ(ローカルシェルスクリプト)は自動化されたもののようである必要があるため、手動で入力するためのパスワードを要求するべきではありません。そのため、この問題を排除することを期待していたので、スクリプトを実行してもパスワードは要求されません。そして、私のスクリプトは次のようになります。

#!/usr/bin/expect
spawn ssh -o GSSAPIAuthentication=no [email protected] 'bash -s' < /path/to/localscript
expect -timeout 7 "*(yes/no)?" { send "yes\r";exp_continue } 
expect -timeout 3 "*d: "
send "qbcrootpass\n"
interact

しかし、それは機能していません。私のシナリオでは、公開キー認証を使用したくないことに注意してください。

Expectを使用して、リモートマシンでローカルスクリプトを実行するのを手伝ってください。

1
Uvais Ibrahim

このリダイレクトは、コマンドラインでシェルによって処理されます。 Expectはその方法を理解しません。これは動作するはずです(テストされていません):

set fh [open /path/to/localscript r]
set contents [read $fh]
close $fh

spawn ssh ... "bash -c '$contents'"
2
glenn jackman