コマンド | 説明 |
---|---|
scp | SSHプロトコルを使用して、ホスト間でセキュアにファイルをコピーするためのコマンド |
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