それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

tar を使ってSSH越しに転送する。(パイプ利用

tar を使ってフォルダをそのまま転送したい。

tar を使って表示出入力を使ってファイルを転送したい。

tar cfh -  /etc/letsencrypt/live/ | ssh root@srv4 'tar xvf - -C /mnt/hdd  '

転送の前後でディレクトリを移動する

tar  cfh - -C /etc/letsencrypt/  live  | ssh root@srv4 'tar xvf - -C  /etc/letsencrypt/'

よくある失敗

tar がややこしくて、ついついrsync を利用しますが、落ち着いてオプションの引数の順番を見直しましょう。

この記事の目的の「圧縮しながら転送し、転送先で展開する」をパイプでまとめてやるとき、-C オプションと - の指定位置が混乱しがち。

展開時のよくある間違い。

-C の記述位置が間違い

tar xvf - -C /mnt/hdd   #正しい 
tar xvf -C /mnt/hdd -  # 間違い
tar -C /mnt/hdd xvf  -  # 間違い

アーカイブ格納時のよくある間違い

- の位置がだめ

tar cfh -  /etc/ | cat - 

|パイプ忘れ(パイプつけないと、 - が解釈されない?)

tar cfh -  /etc/ 

f 忘れ

tar zch -  /etc/  | cat - > out.tar

格納時の-C の場所が悪い

tar  cfh - -C /etc/letsencrypt/  live   ## 正しい
tar  cfh -  live -C /etc/letsencrypt/   ## 間違い
tar  -C /etc/letsencrypt/ cfh -  live    ## 間違い

転送先の設定

転送先サーバーのAuthorizedKeysを工夫すれば、SSHコマンドを省略して、指定コマンドだけが実行される。

これを使うと、Root権限で転送をかけても、少しだけ(気持ちだけ)安全がある。

厳密にやると、ディレクトリトラバーサル脆弱性、上位ディレクトリへのシンボリックリンクを転送など、面倒なことが多いので気休め程度になる。

自動化するときにオペレーションミスの事故を防止するには効果的。

~/.ssh/authorized_keys

command="tar xvf - -C /etc/letsencrypt/live/" ssh-rsa AAAAB3NzaC1yc...QW1YfiMs= root@only-tar-letsencrypt

接続と転送

公開鍵にコマンドを指定したので、コマンドは不要になる。

tar  cfh - -C /etc/letsencrypt/  live  | ssh root@srv4 

ポエム

rsync を使えばいいだろうと思う?rsync は何でもできてしまうので、シビアでセンシティブ情報を転送するときは、rsyncを使いたくない。SSHを開けたくない。

たとえば、つぎのように、機能限定の公開鍵を作って、バックアップを定期的に行いたい。 sshの公開鍵 authorized_keys ファイルの制限機能について調べてみたら楽しかった.(実行コマンド制限など) - それマグで!