Как заставить tar сохранить архив на удаленной машине, используя 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/*

было бы идеально! (Нет труб (и т.д.), только одна команда!)

BrainStone
источник
Это должен быть FTP? У вас нет sshдоступа к этой машине?
Тердон
У меня нет доступа по 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
jirib
источник
Так как именно я буду использовать это? Я имею в виду, как я могу установить, какие файлы должны быть в архиве tar. И куда бы я положил пароль? И как мне его настроить, чтобы мне не приходилось принимать отпечатки пальцев хостов?
BrainStone
Пожалуйста, узнайте больше о ssh, man ssh, man ssh-agent, man ssh_config ответьте на все ваши сомнения. Какие файлы вы определяете локально с помощью аргументов tar, затем он передается через ssh на удаленный хост, а вывод перенаправляется в файл.
Джириб
Возможно ли это сделать без трубы?
BrainStone
Это также не может работать, потому что это должен быть sftp ( без доступа ssh ) или ftp
BrainStone
Для ftp смотрите man lftp. Если вам нужны более сложные сценарии, используйте 'sftp -b' и получите файл с командами или используйте 'здесь документы' (<< EOF).
Джириб
3

Tar не говорит по ftp или sftp. Это не его работа. Вы не можете сделать это только с помощью tar. Использование соответствующих инструментов для каждой работы и объединение их с оболочкой - это нормальный способ работы в системах Unix.

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

Если вы не хотите создавать архив локально, потому что у вас недостаточно места, вы можете создать именованный канал, сделать запись tar в этот канал и найти 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
Жиль "ТАК - перестань быть злым"
источник