Некоторое время у меня возник вопрос, возможно ли, чтобы сценарий Perl или Bash:
Как мне это сделать?
Спасибо за отличный сайт!
Это возможно, но правильный инструмент ожидать. Существуют также ожидаемые библиотеки для большинства языков сценариев.
ваш вопрос помечен тегом perl, поэтому я предполагаю, что вы его используете.
Другие предположения:
я бы создал пара ключей 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 в такой-то каталог, а затем запустите команду и оставайтесь в системе.
-Джонатан