私はssh
経由でファイルをコピーし、転送中にハッシュファイルを作成するバックアップスクリプトを用意しています。さらにpv
は、プログレスバーを表示するために使用されます。Bash配管:1行目以降の入力を分割し、1行目と別のコマンドを実行する
ssh $host "cat '$src_dir/$filename'" \
| pv --bytes --eta --progress --rate --timer --wait $opts \
| tee "$filename" \
| sha1sum > "$filename.sha1"
正しく、私はpv
にファイルのサイズを渡す必要がプログレスバーを表示します。現時点では、最後のバックアップファイルのサイズを指定することでこれを行います。
1回のバックアップで複数回認証する必要がないため、すべてが1 ssh
コールで完了することが重要です。 SSHキーは使用中ですが、パスフレーズで保護されています。
私の考えはssh $host "stat -c%s '$src_dir/$filename'; cat '$src_dir/$filename'"
を呼び出し、1行目の後に出力を分割することです。私はファイルサイズを読み込み、入力の残りの部分にpv
を呼ぶことができました。
バックアップスクリプトが正常に動作しています。これは、それを楽しむための単なる練習です。どのようなアイデアをいただければ幸いですが、スクリプト全体を完全に書き直すつもりはありません。特に私はscp
に切り替えることはありません。なぜなら私は転送中にハッシングを行うことができず、そのためにローカルストレージを信頼したくないからです(もちろん、私はしますが、なぜハッシュを行うのですか?)。
アップデート:私はこれをやってしまった:
ssh $host "cd '$src_dir' && stat -c%s '$filename' && sha1sum '$filename' && cat '$filename'" | {
read size;
head -n 1 > "$filename.sha1";
pv --bytes --eta --progress --rate --size $size --timer --wait > "$filename"
}
それは完璧に動作し、ハッシュがリモートサイトで計算されるという利点を有しています。ディスクに書き込む前ではなく、ネットワーク転送を行う前に。この例では
これを行う唯一の理由は、sshキーパスフレーズを複数回入力したくない場合は、代わりにssh-agentを使用する必要があります。 ssh-agentを使用すると、鍵を一度ロック解除し、ssh-agentに(安全に)それらを追跡させます。完了したら、次の実行時にエージェントを再び使用したり、キーを忘れるように指示したりすることができます。 –
@MikaelAuno:お返事ありがとうございます。私はssh-agentについて知っています。私がssh-agentの設定を壊さなかったなら、私はそれを使用します。しかし、何らかの理由でssh-agentを使用しない同僚とスクリプトを共有したいのです。 –