Як змусити тар зберегти архів на віддаленій машині за допомогою sftp або ftp?


10

Я хотів би створити резервну копію деяких моїх дуже важливих даних на віддаленій машині.
Наразі я просто зберігаю його на своїй локальній машині за допомогою цієї команди:tar -cvjf ~/backups/Backup.tar.bz2 ~/importantfiles/*

Я вважаю за краще не використовувати іншу команду для перенесення її на віддалену машину, тобто я хотів би просто оновити цю команду, щоб вона могла передавати дані на віддалену машину.

Це розроблено так, щоб пізніше був написаний сценарій, який повинен запускатися самостійно, тобто будь-який тип необхідного введення користувача повністю його зіпсує!

Щось на зразок

tar -cvjf sftp://user:pwassword@host/Backup.tar.bz2 ~/importantfiles/*
tar -cvjf  ftp://user:pwassword@host/Backup.tar.bz2 ~/importantfiles/*

було б ідеально! (Без труб (тощо), лише одна команда!)


Чи потрібно це бути ftp? У вас немає sshдоступу до цієї машини?
terdon

У мене немає ssh доступу до машини. Це просто резервний сервер, який я орендую. Так що так, це має бути ftp або sftp.
BrainStone

@BrainStone SFTP входить до SSH
kurtm

Я знаю. Але це налаштовано таким чином, що кожне ssh-з'єднання закривається негайно. SFTP працює, хоча. Я знаю, що це гарне налаштування, але так воно і є.
BrainStone

1
SFTP доступний, коли SSH немає, якщо вони використовують внутрішній сервер sftp і ваша оболонка встановлена ​​на / sbin / nologin.
Грегг Левенталь

Відповіді:


15

Для SSH:

tar czf - . | ssh remote "( cd /somewhere ; cat > file.tar.gz )"

Для SFTP:

outfile=/tmp/test.tar.gz
tar cvf $outfile . && echo "put $outfile" | sftp remote:/tmp/
Connecting to remote...
Changing to: /tmp/
sftp> put /tmp/test.tar.gz
Uploading /tmp/test.tar.gz to /tmp/test.tar.gz
/tmp/test.tar.gz

Ще один SFTP:

outfile=/tmp/test.tar.gz
sftp -b /dev/stdin remote >/dev/null 2>&1 << EOF
cd /tmp
get $outfile
bye
EOF
echo $?
0

То як саме я би цим користувався? Я маю на увазі, як я можу встановити, які файли повинні бути в кулі гудрону. І де я б поставив пароль? І як це встановити, щоб мені не довелося приймати відбиток господарів?
BrainStone

Дізнайтеся більше про ssh, man ssh, man ssh-agent, man ssh_config, щоб відповісти на всі ваші сумніви. Які файли ви визначаєте локально за допомогою аргументів tar, потім він передається через ssh на віддалений хост, а вихід перенаправляється на файл.
jirib

Чи можна це зробити без труби?
BrainStone

Це також не може працювати, оскільки його потрібно мати sftp ( немає доступу до ssh ) або ftp
BrainStone

Для ftp дивіться man lftp. Якщо вам потрібні складніші сценарії, використовуйте 'sftp -b' та майте файл із командами або використовуйте «тут документи» (<< EOF).
jirib

3

Тар не розмовляє ні ftp, ні sftp. Це не його робота. Не можна це робити лише з дьогтем. Використання відповідних інструментів для кожної роботи та комбінування їх із оболонкою - це звичайний спосіб роботи у системах Unix.

Найбільш очевидне рішення - створити архів локально, а потім скопіювати його на віддалену машину.

Якщо ви не хочете створювати архів локально, оскільки у вас не вистачає місця, ви можете створити названу трубу, зробити так, щоб дзеркало записувало в цю трубу і знаходило (-ла) ftp-клієнт, який може читати з труб. На жаль, sftp відмовляється putтрубі. Деякі клієнти FTP працюють, наприклад lftp:

mkfifo f
tar -cvjf f ~/importantfiles/* &
sleep 2
lftp -f - <<EOF
open user@host
put f Backup.tar.bz2
EOF
wait
rm f

Введіть свій FTP пароль ~/.netrc.

Крім того, існує спосіб зберегти команду tar безпосередньо на віддаленому сервері, але вам потрібна попередня налаштування. Встановіть віддалений сервер через SSHFS або curlftpfs .

mkdir -p ~/net/host
sshfs host: ~/net/host
tar -cvjf ~/net/host/Backup.tar.bz2 ~/importantfiles/*
fusermount -u ~/net/host
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.