FreeBSDのサーバからscpしようとして、鍵認証まで通っているのに、scpでのファイル転送に失敗するので調査した際のメモ。
□ 現象 ssh鯖に鍵認証でログインできるものの、scpしようとすると認証を経てもいつまでたっても 転送される様子がなく、固まったままの様子になる。 □ 原因究明 まずは、scpコマンドに-vオプションを付けて詳細モードで実行。 $ scp -v user@111.222.333.444:~/hoge.txt . : debug1: Sending command: scp -v -f /home/user/hoge.txt 上記のように出力されて、鍵パスワードを入力しても いつまでたっても転送されてこない。接続できて認証は通っているのに。 接続はできており、認証は通っているので、ftpなどと違ってiptablesなどの フィルタリングや、ルータなどが原因の可能性も低い。 ということで、sshのバージョン違いを疑って、sshのバージョンの 新しい別のLinux環境で試してみましたが、同じくうまくいかず。 ということで、手元では複数の環境で試してうまくいかないので 接続先のFreeBSDな鯖環境での可能性が高い。 □ 解決法 sshで関係ありそうな隠しファイルやフォルダ等をrenameして無効に した上で、確認するとどうやら.tcshrcなどの設定ファイルの中で シェルを起動していたのがまずいことが分かった。 元々、FreeBSD環境はtcshがデフォルトだったので起動後にbashに変えるべく 横着して.tcshrcに「exec bash」と書いていたのがそもそもの誤り。 デフォルトシェルtcsh→設定ファイル.tcshrc→bashの起動→.bashrc を行っていたのだ。 ということで、デフォルトシェルの変更を行う。 $ chsh を実行して、デフォルトシェル Shell:の項目をFreeBSD環境でのbashのフルパス 「Shell: /usr/local/bin/bash」に変更した。 また、.bash_profileを作成し、「. ~/.bashrc」を追加して.bashrcを読み込ませる ように設定しておいた。.bashrcには元々いくつかの設定を追加してある。 デフォルトシェルbash→.bash_profile→.bashrc 参考 akiyan.com - scpが出来なくて超ハマったメモ(原因は.bashrc) http://www.akiyan.com/blog/archives/2008/02/scpbashrc.html