Каждый разработчик в определенные моменты жизни сталкивается с задачами, ктороые требуют постоянно проделывать одну и туже работу каждый день. Если такая задача включает в себя авторизацию и работу на разнообразных удаленных машинах, или передачу файлов на другие сервера, то она явно подлежит автоматизации. Если одна и та же процедура повторяется несколько раз, то ее надо автоматизировать. Если вы при этом работаете в windows, то вам очень поможет Cygwin.
Специально для таких целей используется bash (командная оболчка Unix). Для автоматизации ввода пароля.логина используется другая оболчка - expect.
Приведу пример простого скрипта, кторый с вашей машины логинится на другую, авторизируется там и проводит обновление из SVN какого-то проекта (задача выбрана просто для примера, также для примера она буде запущена из под Cygwin)
Устанавливаем Cygwin, заходим в домашнуюю папку пользователся (например "c:\cygwin\home\Администратор\"). В ней создаем файл:
File:
update.sh
С таким содержимым:
#!/bin/bash
#!/bin/expect
expect -c 'spawn ssh -p 22 user@host;
expect assword ;
send "password\n" ;
send "cd /var/www/project_path\r";
send "sudo svn up\r";
expect assword ;
send "password\n" ;
expect "ssh>"'
echo "Update finished!"
#!/bin/bash - директива которая указывает местоположения непосредственно bash обработчика
#!/bin/expect - указывает местоположение обработчика expect
expect -c '...' - выполняет запуск консольных команд с перехватом ввода - вывода с помощью expect
spawn ssh -p 22
user@
host; - конектимся к удаленному хосту с указаным именем пользователя
expect assword; - команда которая перехватывает ввод пароля и ждет когда мы его пошлем из нашего скрипта
send "
password\n"; - посылаем запросившему серверу пароль пользователя в удаленной системе
send "cd
/var/www/project_path\r"; - переходим в папку с проектом
send "sudo svn up\r"; - выполняем обноление из SVN с правами админа (предпологаем что наш юзер имеет права для віполнения команды sudo)
expect assword ; - перехватываем ввод пароля
send "
password\n"; - отправляем пароль пользователя
expect "ssh>" - запрашиваем консоль
echo "Update finished!" - информируем об успешном обновлении
Обработка ошибок, варианты ввода вы уже можете дописать сами. Главная цель - пример реального использования bash+expect