Если Вы хотите получить доступ к системе при пользователе мерзавца, необходимо использовать sudo:
sudo -s -u git
или
sudo su - git
Для 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
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