SSH経由でファイルをコピー をしようとしていますが、必要な正確なファイル名がわからないため、scp
を使用できません。小さなバイナリファイルとテキストファイルは問題なく転送されますが、大きなバイナリファイルは変更されます。サーバー上のファイルは次のとおりです。
remote$ ls -la
-rw-rw-r-- 1 user user 244970907 Aug 24 11:11 foo.gz
remote$ md5sum foo.gz
9b5a44dad9d129bab52cbc6d806e7fda foo.gz
移動した後のファイルは次のとおりです。
local$ time ssh [email protected] -t 'cat /path/to/foo.gz' > latest.gz
real 1m52.098s
user 0m2.608s
sys 0m4.370s
local$ md5sum latest.gz
76fae9d6a4711bad1560092b539d034b latest.gz
local$ ls -la
-rw-rw-r-- 1 dotancohen dotancohen 245849912 Aug 24 18:26 latest.gz
ダウンロードしたファイルはサーバー上のファイルよりも大きいことに注意してください!ただし、非常に小さいファイルで同じことを行うと、すべてが期待どおりに機能します。
remote$ echo "Hello" | gzip -c > hello.txt.gz
remote$ md5sum hello.txt.gz
08bf5080733d46a47d339520176b9211 hello.txt.gz
local$ time ssh [email protected] -t 'cat /path/to/hello.txt.gz' > hi.txt.gz
実際0m3.041sユーザー0m0.013s sys 0m0.005s
local$ md5sum hi.txt.gz
08bf5080733d46a47d339520176b9211 hi.txt.gz
この場合、両方のファイルサイズは26バイトです。
小さいファイルは問題なく転送されるのに、大きいファイルには数バイトが追加されるのはなぜですか?
その方法を使用してファイルをコピーすると、ファイルが異なるように見えます。
ls -l | grep vim_cfg
-rw-rw-r--. 1 slm slm 9783257 Aug 5 16:51 vim_cfg.tgz
ssh ... cat
コマンド:
$ ssh dufresne -t 'cat ~/vim_cfg.tgz' > vim_cfg.tgz
ローカルサーバー上のこのファイルの結果:
$ ls -l | grep vim_cfg.tgz
-rw-rw-r--. 1 saml saml 9820481 Aug 24 12:13 vim_cfg.tgz
結果のファイルをローカル側で調査すると、ファイルが破損していることがわかります。 -t
ssh
コマンドから切り替えると、期待どおりに機能します。
$ ssh dufresne 'cat ~/vim_cfg.tgz' > vim_cfg.tgz
$ ls -l | grep vim_cfg.tgz
-rw-rw-r--. 1 saml saml 9783257 Aug 24 12:17 vim_cfg.tgz
チェックサムも機能するようになりました:
# remote server
$ ssh dufresne "md5sum ~/vim_cfg.tgz"
9e70b036836dfdf2871e76b3636a72c6 /home/slm/vim_cfg.tgz
# local server
$ md5sum vim_cfg.tgz
9e70b036836dfdf2871e76b3636a72c6 vim_cfg.tgz