Поиск по сайту:

Учебное пособие по ожиданию сценария SSH


Expect script — отличная утилита для Linux/Unix. В повседневной жизни мне приходится иметь дело со многими unix-серверами, будь то на работе или на моем хостинг-сервере. Поэтому мне нужно запомнить множество пользователей SSH, их пароли, а затем пользователей и пароли SU. Это немного беспорядочно, когда количество серверов огромно. Поэтому я подумал о написании скрипта, который будет автоматически регистрировать меня на сервере. Когда я впервые начал работать над этим, я застрял на том, как вводить пароль SSH, потому что обычные оболочки Unix не имеют возможности отправить пароль, когда ему будет предложено войти в систему. Затем я узнаю о expect script, который позволяет автоматизировать взаимодействие с программами, открывающими терминал для ввода.

Ожидайте сценарий

Пример сценария SSH ожидания

Вот сценарий, который я создал для автоматического входа на сервер SSH, а затем для входа в систему с правами суперпользователя, а затем выполните простую команду. sshsudologin.expect

#!/usr/bin/expect

#Usage sshsudologin.expect <host> <ssh user> <ssh password> <su user> <su password>

set timeout 60

spawn ssh [lindex $argv 1]@[lindex $argv 0]

expect "yes/no" { 
	send "yes\r"
	expect "*?assword" { send "[lindex $argv 2]\r" }
	} "*?assword" { send "[lindex $argv 2]\r" }

expect "# " { send "su - [lindex $argv 3]\r" }
expect ": " { send "[lindex $argv 4]\r" }
expect "# " { send "ls -ltr\r" }
interact

Важные моменты об ожидающем скрипте

  1. Обратите внимание на первую строку, указывающую, что сценарий ожидания будет использоваться в качестве интерпретатора.
  2. Тайм-аут сценария по умолчанию составляет 10 секунд, поэтому я установил тайм-аут на 60 секунд, чтобы избежать проблем с тайм-аутом, если для появления запроса на вход требуется время.
  3. Обратите внимание на команду expect, за которой следует регулярное выражение, а затем то, что должно быть отправлено в качестве ответа. Первый вариант выбора Да/Нет добавлен, чтобы убедиться, что он не сработает, если ключ удаленного сервера еще не импортирован.
  4. Другие ожидаемые регулярные выражения различаются на разных серверах, для моего сервера они заканчиваются на \#, но для некоторых других серверов они могут заканчиваться на \$, поэтому вам может потребоваться отредактировать их соответствующим образом. Единственное, что нужно проверить, это соответствие регулярного выражения ожидаемой команды, чтобы была отправлена соответствующая команда или пароль.
  5. Последняя команда ожидания просто показывает, что мы можем отправлять команды также после входа на сервер.

Вот результат, когда я запускаю приведенный выше сценарий ожидания с правильными параметрами.

pankaj@Pankajs-MacBook-Pro:~$/Users/pankaj/scripts/sshloginsudo.expect 'journaldev.com' 'pankaj' 'ssh_pwd' 'su_user' 'su_pwd'
spawn ssh pankaj@journaldev.com
pankaj@journaldev.com's password: 
Last login: Sun Jun  9 19:54:17 2013 from c-67-161-57-160.hsd1.ca.comcast.net
pankaj@journal [~]# su - su_user
Password: 
su_user@journal [~]# ls -ltr
total 708
...

Дополнительные советы по сценарию ожидания

  1. Сценарий ожидания можно использовать повторно, поскольку вся информация передается в виде аргументов, поэтому лучше всего создать псевдоним для каждого из них для быстрого входа в систему и сэкономить время при вводе всех параметров. Например, alias journal=/Users/pankaj/scripts/sshloginsudo.expect journaldev.com pankaj ssh_pwd su_user su_pwd
  2. Для передачи аргументов всегда лучше использовать одинарные кавычки, поскольку в большинстве случаев пароли содержат специальные символы, которые могут привести к забавным результатам, если они не заключены в кавычки.

ПРИМЕЧАНИЕ. Приведенный выше сценарий протестирован в системах Mac OS и Linux. Ссылка: Страница SourceForge