̃Gg[͂ĂȃubN}[Nɒlj

Unix :: コマンド / scp



コマンド説明
scpSSHプロトコルを使用して、ホスト間でセキュアにファイルをコピーするためのコマンド


Must be connected to a terminal.

scp でファイルをコピーしようとすると「 Must be connected to a terminal. 」でエラーになる場合の対処方法です。

$ scp hoge@example.com:/path/to/file .
Must be connected to a terminal.
  • 上記のように怒られる


原因

原因は、screen にあります。
相手ホスト(転送元)の .bashrc や .zshrc 等に、何かしらの screen 起動コマンドが記述されていると思いますが、その記述が悪さをしています。
相手ホストは、接続元が scp での接続においても screen を起動しようと試みます。その結果、scp は screen を受け入れることができないのでエラーが発生します。


対処方法

対処方法として、.bashrc の screen 起動コマンドの記述を下記のように変更しました。

  • 変更前
if [ "$TERM" != 'screen' ]; then
    screen -xR
fi


  • 変更後
if [ "$TERM" != 'screen' -a "$TERM" != 'dumb' ]; then # dumb = scp
    screen -xR
fi

if 文に and 条件として、”$TERM” != 'dumb' を加えました。
dumb は、scp の TERM名なので、 dumb での接続の場合は、screen を起動しない設定になります。
なお、”$TERM” != 'screen' の screen は、screen のTERM名です。
この記述により、screen の重複起動を防いでいます。

screen の -xR オプションについは、下記を参照。
Unix :: コマンド / screen





unix/command/scp.txt