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