Как заставить tar сохранить архив на удаленной машине с помощью sftp или ftp?

Если Вы хотите получить доступ к системе при пользователе мерзавца, необходимо использовать sudo:

sudo -s -u git

или

sudo su - git
9
15.10.2013, 00:56
2 ответа

Для 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
14
27.01.2020, 20:05
  • 1
    Таким образом, как точно я использовал бы это? Я имею в виду, как я могу установить, которым файлы должны быть в шаре tar. И где я поместил бы пароль? И как я настраиваю его так, чтобы я не принимал цифровой отпечаток хостов? –  BrainStone 14.10.2013, 16:41
  • 2
    Узнайте больше о ssh, человек ssh, ssh-агент человека, человек ssh_config отвечают на все Ваши сомнения. То, какие файлы Вы определяете локально с аргументами tar, затем это передается по каналу через ssh к удаленному хосту и производится, перенаправляется в файл. –  jirib 14.10.2013, 16:49
  • 3
    Действительно ли возможно сделать это без канала? –  BrainStone 14.10.2013, 16:51
  • 4
    Это также не может работать, потому что это должен быть sftp (никакой ssh доступ) или ftp –  BrainStone 14.10.2013, 16:55
  • 5
    Для ftp, посмотрите человека lftp. Если у Вас должны быть более сложные сценарии, используйте 'sftp-b' и имейте файл с командами или использованием 'здесь документы' (<<EOF). –  jirib 14.10.2013, 17:02

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

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

Если Вы не хотите создавать архив локально, потому что у Вас нет достаточного количества комнаты, можно создать именованный канал, заставить tar записать в этот канал и найти (s) клиент 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
3
27.01.2020, 20:05

Теги

Похожие вопросы