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/*

完璧になります!(パイプなしなど)、1つのコマンドのみ!)


FTP である必要がありますか?sshこのマシンにアクセスできませんか?
terdon

マシンにSSHでアクセスできません。それは私が借りている単なるバックアップサーバーです。だからはい、それ ftpまたはsftp でなければなりません。
BrainStone 2013年

@BrainStone SFTPはSSHの一部です
kurtm 2013年

知っている。しかし、すべてのssh接続がすぐに閉じられるように設定されています。SFTPは機能します。私はそれが奇妙なセットアップであることを知っていますが、それはそれがそうである方法です。
BrainStone 2013年

1
SFTPは、SSHがsftp内部サーバーを使用していて、シェルが/ sbin / nologinに設定されている場合に使用できます。
Gregg Leventhal 2014年

回答:


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

それで、私はこれをどのように正確に使用しますか?どのファイルをtarボールに入れるかをどのように設定すればよいですか。そして、どこにパスワードを入れますか?また、ホストのフィンガープリントを受け入れる必要がないように設定するにはどうすればよいですか?
BrainStone 2013年

ssh、man ssh、man ssh-agent、man ssh_configの詳細を確認して、すべての疑問に答えてください。どのファイルをtar引数でローカルに定義すると、ssh経由でリモートホストにパイプされ、出力がファイルにリダイレクトされます。
ジリブ2013年

パイプなしでそれを行うことは可能ですか?
BrainStone 2013年

sftp(sshアクセスなし)またはftp である必要があるため、これも機能しません
BrainStone

ftpについては、man lftpを参照してください。より複雑なシナリオが必要な場合は、「sftp -b」を使用して、コマンドを含むファイルを作成するか、「ヒアドキュメント」(<< EOF)を使用します。
jirib

3

Tarはftpやsftpを話しません。それはその仕事ではありません。tarだけでこれを行うことはできません。各ジョブに適切なツールを使用し、それらをシェルと組み合わせることは、UNIXシステムでの通常の方法です。

最も明白な解決策は、アーカイブをローカルで作成し、それをリモートマシンにコピーすることです。

十分なスペースがないためにローカルでアーカイブを作成したくない場合は、名前付きパイプを作成し、このパイプにtarを書き込んで、パイプから読み取ることができる(s)ftpクライアントを見つけることができます。残念ながら、sftp putはパイプを拒否します。lftpなど、一部のFTPクライアントは機能します。

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.