scpが出来なくて超ハマったメモ(原因は.bashrc)

とあるFreeBSDのサーバーからファイルをscpでダウンロードしようとして、出来なくてハマったメモです。

状態は以下の通り。

  • サーバーは FreeBSD 4.10
  • クライアントは CentOS4 と FreeBSD 6.1-Release
  • sshは繋がる
  • WindowsからWinSCPでのダウンロードもOK
  • scpでダウンロードしようとするとできない(固まる)
  • sshでリモートコマンドが通らない(固まる)

scp を v オプション付きでログを出力しながら実行してみると、以下の時点で固まっていました。

debug1: Sending command: scp -v -f ~/filename.ext
原因は、.bashrcで別のシェル(zsh)を立ち上げていたことでした。

↓.bashrcの中身

$HOME/local/bin/zsh
この行をコメントアウトしたところ、解決しました。

なぜこんなことをしていたかというと、接続先のサーバーにはzshがインストールされておらず、権限も無かったのでホームディレクトリ($HOME/local/bin/zsh)にzshをインストールしていました。chshでホームディレクトリにインストールしたシェルを指定することは出来ないので、.bashrcで自動で起動するようにしていたのです。

sshも繋がるしWinSCPも出来たのでなかなか原因にたどり着くことができませんでした。同じような状況のときは.~rcを調べてみるといいかもしれません...。

4 Comments

  1. katoken
    試してませんが、以下のようにしたらどうでしょうか? exec $HOME/local/bin/zsh
  2. あきやん
    > katokenさん 提案ありがとうございます。 試してみましたが残念ながら...同じように固まりました。
  3. katoken
    うまい解決法じゃないかもしれませんが、.bashrc の内容を以下にすることで scp できるようになりました。あまり試していないので他に影響があるかもしれませんが。。。 --- .bashrc --- if [ $PS1 ]; then /bin/zsh fi --- end ---
  4. あきやん
    > katokenさん できました! なるほど、対話的モードのときだけセットされる環境変数を利用して...ですかね。 参考になりました!