Как можно через одно ssh-соединение сделать несколько действий?
Хочу поставить на крон скрипт, который будет бекапить данные по ssh. Бекап по идее будет состоять из трех действий:
1) Скопировать предыдущий бекап в новую папку хардлинками. Видимо так:
ssh user@server cp --link from/ to/
2) Закачать бекап базы данных. Видимо, так:
scp database.tar.gz user@server:to/
3) Синхронизировать новые файлы с помощью rsync
Это только обязательные и очевидные действия. Из неочевидных — нужно получить список директорий, чтобы узнать откуда копировать в первом пункте. Иногда нужно будет проредить старые бекапы.
Вопрос в следующем: каждая из этих команд установит свое собственное ssh-соединение. Может, конечно это не так долго по сравнению со временем самого бекапа, но все равно это не кошерно. Можно как-то сделать это все через одно ssh-соединение?
Возможно Вам стоит посмотреть в сторону ключика "-M" у ssh. Эта опция позволяет использовать уже установленное соединение с удаленным хостом для новых ssh сессий с тем же хостом. Чуть подробнее с небольшим примером: www.linuxjournal.com/content/speed-multiple-ssh-connections-same-server
> как мне туда пропихнуть файл с этой стороны?
scp localfile user@host:/tmp/remote_file
scp user@host:/tmp/remote_file localfile
а чем вам не нравится три последовательных действия:
1) запустить через ssh скрипт на той стороне который подготовит бекап
2) слить бекап базы
3) запусть rsync
ssh-соединение есть все сделать на ключах запускает секунды 4. Это такая большая проблема?
ну или второй пункт можно пропустить и засунуть его в третий — один черт файло рсинкается, а первый запускать по крону.
> ssh-соединение есть все сделать на ключах запускает секунды 4. Это такая большая проблема?
Это не слишком большая проблема, но если возможно, хочется сделать все правильно.
scp, возможно, не понадобится, т.к. ssh перенаправляет весь локальный ввод удаленно запущеным программам, т.е. что-либо «пропихнуть» проблемы нет: cat foo | ssh host 'command1; command2… | cat > bar'