1

expect+ ssh+でスクリプトを作成bash executed commandし、リモート マシンで一部のプロセスを自動化しました。

問題は、それが毎回機能していないことです。

  • 時々それはハングアップしますpassword:
  • 時々、正しくログインしますが、ログインしませんexecute remote command。タイムアウト後に終了するだけです。

ここで bash はスクリプトです:

#!/bin/bash

USER="user"
PASSWORD="password"
MACHINES="host1 host2 host3 host4"

ex() {

expect -c "
                log_file ${MACHINE}.log;#
                set timeout 8;
                spawn ssh $USER@$MACHINE
                expect -re \".*ssword: \" {send \"$PASSWORD\n\"}
                expect -re \".*host-.* \" { send \"sudo su -\r\"}
                expect -re \".*user: \" { send \"$PASSWORD\r\"}
                expect -re \".*# \" { send \"/usr/local/bin/REMOTE.COMMAND.sh\r\"}
                expect -re \".*# \" { send \"exit\r\"}
                expect -re \".*host-.* \" { send \"exit\r\"}


"

}

machines() {

for MACHINE in $MACHINES ; do

ex &
sleep 0.5

done
}


machines

ここに私の実用的な解決策があります- 何か間違っている/効率的でないコメントがある場合は:

#!/bin/bash

USER="user"
PASSWORD="password"
MACHINES="host1 host2 host3 host4"

ex() {

expect -c "
        log_file ${MACHINE}.log;#
        match_max 100000;
        set timeout 30;
        spawn ssh $USER@$MACHINE
        expect {
                -re \".*ssword: \" {send \"$PASSWORD\r\"; exp_continue }
                -re \".*user@host-.*\" { send \"sudo su -\r\"; exp_continue }
                -re \".*ssword.*:.*\" {send \"$PASSWORD\r\"; exp_continue }
                -re \".*host-.*# \" { send \"/usr/local/bin/REMOTE.COMMAND.sh\r\"; }
        }
        expect {
                -re \".*host-.*# \" { send \"exit\r\"; }
        }
        expect {
                -re \".*user@host-.*\" { send \"exit\r\"; }
        }

"

}

machines() {

for MACHINE in $MACHINES ; do

ex &
sleep 0.5

done
}

machines
4

2 に答える 2