![ssh удаленная команда-fu](https://rvso.com/image/488038/ssh%20%D1%83%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F%20%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%B0-fu.png)
Я пытаюсь сделать удаленное резервное копирование из-за брандмауэра. На самом деле, не проблема разбить это на отдельный скрипт, который вызывается в crontab, но это не весело! Что я пытаюсь сделать с:
pg_dump -U my_user my_database | ssh me@myserver "> backup.sql"
заключается в резервном копировании базы данных postgresql (сбрасывает все данные на stdout) и перенаправлении их удаленной команде ssh, которая просто помещает их в backup.sql.
К сожалению, все, что я получаю, это пустой "backup.sql" на моем удаленном компьютере. Перенаправление - не моя сильная сторона, поэтому любые советы будут оценены по достоинству. Спасибо.
решение1
пытаться
pg_dump -U my_user my_database | ssh me@myserver "cat > backup.sql"
решение2
Еще лучше: сожмите его перед тем, как подключаться по SSH:
pg_dump -U my_user my_database | gzip -c | ssh me@myserver "cat > backup.sql.gz"
Это экономит массу пропускной способности при использовании SQL-дампов.
Я на самом деле делаю наоборот. У меня есть резервный сервер, который входит в сервер, который нужно скопировать. Это означает, что если какой-либо сервер (кроме резервного сервера, у которого есть серьезно фашистская безопасность) будет скомпрометирован на уровне корня, резервный сервер — и, следовательно, все остальные серверы! — не будет скомпрометирован по умолчанию.
Поэтому моя команда для удаленного создания дампа SQL немного отличается:
ssh <server> "pg_dump -U <user> <database> | gzip -c" > /backups/sqlbackup.sql.gz
Обратите особое внимание на кавычки — они определяют, что выполняется на удаленной стороне, а что — локально.