メニュー 蕭寥亭 検索

開店休業の記

scp の不具合について

 仕事で遭遇した不具合について、メモ。

 scp( Secure Copy )ってのは、SSH を利用して、あるシステムから別のシステムへネットワーク経由でファイルをコピーするためのコマンドです。

 これを使って対象のディレクトリをまるごとコピー(オプション -r でディレクトリの再帰コピーが可能)していたところ、ある日、こんなエラーが出るようになりました。

$ scp -r ./xyz/.data remote:/test

scp: realpath /test/.data: No such file

scp: upload "/test/.data": path canonicalization failed

scp: failed to upload directory ./xyz/.data to /test

 今まで使えたものが急に使えなくなったので、「どうしたものやら」としばらく調べてようやく原因が判明しました。

 今年の4月に OpenSSH がバージョン 8 から 9 へとメジャーアップデートされまして、同時に scp のデフォルトのプロトコルも変更されました。この影響でコピー元のシステムの OpenSSH のバージョン 9 で、コピー先のバージョンが 8 だと、バージョンの不整合によりエラーが発生する場合があるんだとか。

 どうやらコピー元のシステムがいつのまにか新しくなっていて、OpenSSH も最新版になっていたのに、コピー先のシステムは古いままだったのでコピーに失敗していたようです。

 対策はありまして、scp にオプション -O(大文字でオー)を追加すれば以前のプロトコルを使うようになり、不整合が発生しなくなります。具体的には以下のようにしました。

$ scp -r -O ./xyz/.data remote:/test

 これで解決しました。わかりにくい不具合でした。