Итак, задача — на сервере под управлением FreeBSD сваять скриптик, который регулярно «ходит» по SFTP и «забирает» определенный файлик.
Поначалу задача показалась мне очень простой — пишем сценарий, скармливаем его sftp клиенту и вуаля.
На деле всё сильно осложнилось:
1. Сервер не принимал аутентификацию по ключам (себе то я сгенерировал, а вот закинуть ключ на сервер — облом), поэтому коннект осуществлялся только с вводом пароля
2. Передача пароля клиенту через конвеер либо перенаправлением ввода не срабатывал — ТОЛЬКО ручной ввод с клавиатуры
Далее гугл и статейка Автоматизация sftp
Установка expect и проба скрипта так же не увенчалась успехом, но и несколько часов мучения с перлом тоже — NET::SFTP ни в какую не хотел вставать на серваке.
После чего у меня возникла идея автоматического монтирования sftp — снова гугл и решение — sshfs !
Но опять же sshfs требует ручного ввода пароля — по идее раз замонтировал и работай, но аптайм сервера всё же не 100% и при перезагрузке монтировать нужно автоматом…
Снова затык!
Попровал объединить первый метод expect и sshfs, который и привёл к положительному результату после поисков в виде скриптика:
1 2 3 4 5 |
#!/usr/local/bin/expect spawn —ignore HUP /usr/local/bin/sshfs root@192.168.1.1:/usr/ /mountpoint expect «*assword*» send «SuperPass\r» expect «\n» |
Кидаем его в автозапуск — то есть сюды /usr/local/etc/rc.d
Чтоб запускался последним – имя делам начиная с Z
ЧТД