Назад | Перейти на главную страницу

Автоматизация сценария: вход в систему, ввод пароля, запуск команд, сохранение вывода локально?

Некоторое время у меня возник вопрос, возможно ли, чтобы сценарий Perl или Bash:

Как мне это сделать?

Спасибо за отличный сайт!

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

ваш вопрос помечен тегом perl, поэтому я предполагаю, что вы его используете.

Другие предположения:

  • вы используете ssh
  • вы в системе типа Linux
  • если вы используете Windows, попробуйте установить cygwin (может быть, излишний для того, что вы делаете)

я бы создал пара ключей ssh* между вашим локальным и удаленным компьютером, это позволяет вам установить безопасное соединение без необходимости вводить пароль (очень полезно для автоматических сеансов). ссылка ведет на Google, потому что существует очень много руководств, и они незначительно различаются, поэтому вам следует найти учебник для своей версии операционной системы.

как только вы сможете это сделать, вы сможете выполнять команды удаленно

$local machine> ssh remoteserver.com /file/to/execute.sh

вывод будет отображаться на вашем локальном компьютере. затем вы можете выполнить оболочку из perl и выполнить эту команду, а затем сохранить вывод в файл, как если бы вы выполняли сценарий на локальном компьютере.

Вот пример сценария ожидания, который автоматизирует ваш ssh (при условии) входа в систему. Источник: http://bash.cyberciti.biz/security/expect-ssh-login-script/

#!/usr/bin/expect -f
# Expect script to supply root/admin password for remote ssh server
# and execute command.
# This script needs three argument to(s) connect to remote server:
# password = Password of remote UNIX server, for root user.
# ipaddr = IP Addreess of remote UNIX server, no hostname
# scriptname = Path to remote script which will execute on remote server
# For example:
#  ./sshlogin.exp password 192.168.1.11 who
# ------------------------------------------------------------------------
# Copyright (c) 2004 nixCraft project <http://cyberciti.biz/fb/>
# This script is licensed under GNU GPL version 2.0 or above
# -------------------------------------------------------------------------
# This script is part of nixCraft shell script collection (NSSC)
# Visit http://bash.cyberciti.biz/ for more information.
# ----------------------------------------------------------------------
# set Variables
set password [lrange $argv 0 0]
set ipaddr [lrange $argv 1 1]
set scriptname [lrange $argv 2 2]
set arg1 [lrange $argv 3 3]
set timeout -1
# now connect to remote UNIX box (ipaddr) with given script to execute
spawn ssh root@$ipaddr $scriptname $arg1
match_max 100000
# Look for passwod prompt
expect "*?assword:*"
# Send password aka $password
send -- "$password\r"
# send blank line (\r) to make sure we get back to gui
send -- "\r"
expect eof

Я пробовал это с ожиданием, но это не сработало: в конце концов закрылось соединение.

Можем ли мы запустить сценарий через ssh, который будет входить в удаленные машины, запускать команду и не отключать?

Итак, ssh на машине, cd в такой-то каталог, а затем запустите команду и оставайтесь в системе.

-Джонатан