Изменить сценарий SSH, основанный на ожидании, для работы на машинах, для которых не требуется пароль - PullRequest
1 голос
/ 27 февраля 2012

Следующий ожидаемый скрипт работает нормально, когда машина Linux запрашивает пароль после входа в систему.Но некоторым нашим Linux-машинам не нужен пароль для SSH (мы можем войти без пароля), поэтому мне нужно изменить ожидаемый сценарий, чтобы поддерживать компьютеры без пароля.Как я могу это сделать?

$ expect_test=`cat << EOF
set timeout -1
spawn  ssh $IP  hostname
    expect {
              ")?"   { send "yes\r"  ; exp_continue  }
              word:  {send "pass123\r"     }
    }
expect eof
EOF`

$ expect -c "$expect_test"

При работе на машине, для которой требуется пароль:

 $ IP=10.17.18.6
 $ expect -c "$expect_test"
 spawn ssh 10.17.18.6 hostname
 sh: /usr/local/bin/stty: not found
 This computer system, including all related equipment, networks and network devices     (specifically including Internet access),is pros
 yes
 Password: 
 Linux1_machine

При работе на машине, которая не требует пароля:

$ IP=10.10.92.26
$ expect -c "$expect_test"
spawn ssh 10.10.92.26 hostname
sh: /usr/local/bin/stty: not found
Linux15_machine
expect: spawn id exp5 not open
while executing
"expect eof"

Ответы [ 2 ]

1 голос
/ 27 февраля 2012

Используйте эту команду ожидаемости:

expect {
    ")?"   {send "yes\r";     exp_continue}
    word:  {send "pass123\r"; exp_continue}
    eof
}

Таким образом, если EOF встречается до «password:», скрипт будет работать нормально.

0 голосов
/ 27 февраля 2012

Измените ваш тайм-аут с -1 на что-то другое, это приведет к тому, что вы перейдете к следующей строке, если ожидаемая строка не появится в течение данного времени ожидания.

Текущее значение, -1 вызываетблокировать навсегда, если не запрашивается пароль.

ОБНОВЛЕНИЕ:

 set timeout 5
 spawn  ssh $IP  hostname
       expect {
                 ")?"   { send "yes\r"  ; exp_continue  }
                 word:  {send "pass123\r"     }
                 eof    {exit}
      }
...