私は現在 Fedora 18 gnome-terminal を使用していて、その中で tmux
マルチプレクサを開始しています。 ssh
コマンドを使用して CentOS 5サーバーに接続した後、次のことがわかりました。
ls
結果に色がありませんtmux
、screen
、hexedit
、htop
はすべて次のようなエラーメッセージで開始できませんでした:端末を開くことができませんでした:見つからないか不適切な端末:screen-256color
ssh
は$ TERM環境変数をサーバーに渡しているようですが、Fedora 18の/etc/ssh/ssh_config
ファイルでは見つかりません。
サーバー上の$ TERM変数を手動で変更することはできますが、接続するたびに再び発生します。それを防ぐ方法は?
$TERM
は、どの端末に話しているかをアプリケーションに通知して、どの端末に話しかけるかを知らせます。
これをリモートホストでサポートされている値に変更します。この値は、端末(screen
)にできるだけ一致します。
ほとんどのLinuxシステムには、少なくともscreen
terminfoエントリが必要です。そうでない場合、screen
はvt100
のスーパーセットを実装し、vt100
はユニバーサルです。そう:
TERM=screen ssh Host
または
TERM=vt100 ssh Host
256色のサポートが必要な場合は、xterm-256color
を試してみてください(screen
はxterm
と同じように256色をサポートしています)。ターミナルアプリケーションがサポートしていることをアプリケーションに伝えます。 256色とそれらを使用する方法を教えてください。
または、リモートホストにterminfoエントリをインストールできます。
infocmp -x | ssh -t root@remote-Host '
cat > "$TERM.info" && tic -x "$TERM.info"'
私の場合、ローカルデスクトップの.zshrc
(bashを使用している場合は.bashrc
)にエイリアスを追加するだけです。
alias ssh='TERM=xterm ssh'
エイリアスを既に使用している場合は、環境割り当てを含めるようにエイリアスを調整します。
これを.bashrc
リモートホスト:
# 256-color mode not supported on this Host
if echo $TERM | grep -q -- '-256color'; then
echo -e '\n\n256-color mode not supported on this Host. Reverting TERM...\n'
export TERM=`echo -n $TERM | sed 's/-256color//'`
fi
そのように、両方のxterm-256color
およびscreen-265color
は適切に処理されます。また、サーバーが後でアップグレードされて256色をサポートする場合、SSHを実行するときにTERM変数が変更される理由を不思議に思って壁にぶつからないように、メモを出力します。
変更$TERM
は機能するかもしれませんが、これはお勧めしません。これは解決策ではなく回避策にすぎません。
私のシステムでこの問題が発生した場合は、最も一般的な端末タイプのサポートをリモートシステムにインストールすることで修正します。
yum install ncurses-base
ために screen-256color
CentOSyum install ncurses-term
ために screen-256color-bce
CentOSapt install ncurses-base
両方のための screen-256color
およびscreen-256color-bce
Debian、Ubuntu、ミントNcurses関連のパッケージは、他の多くの端末もサポートし、他のすべての大規模ディストリビューションでも利用できます。 (しかし、私のユースケースとあなたの質問にはこれで十分です)
Man ssh_configを参照してください:
SendEnv
Specifies what variables from the local environ(7) should be sent
to the server. Note that environment passing is only supported
for protocol 2. The server must also support it, and the server
must be configured to accept these environment variables. Refer
to AcceptEnv in sshd_config(5) for how to configure the server.
Variables are specified by name, which may contain wildcard char‐
acters. Multiple environment variables may be separated by
whitespace or spread across multiple SendEnv directives. The
default is not to send any environment variables.
そして男sshd_config:
AcceptEnv
Specifies what environment variables sent by the client will be
copied into the session's environ(7). See SendEnv in
ssh_config(5) for how to configure the client. Note that envi-
ronment passing is only supported for protocol 2. Variables are
specified by name, which may contain the wildcard characters `*'
and `?'. Multiple environment variables may be separated by
whitespace or spread across multiple AcceptEnv directives. Be
warned that some environment variables could be used to bypass
restricted user environments. For this reason, care should be
taken in the use of this directive. The default is not to accept
any environment variables.
それによると、デフォルトでは変数を送信しないようにする必要がありますが、TERMは特別なようです。とにかく出品です。
したがって、sshを呼び出すときにTERMを変更するか(TERM=xterm ssh ...
のように)、ログイン後に変更するか(.bash_profile
のように)、サーバー側で不明なTERMタイプを定義することができます(そこにrootアクセスがある場合)。詳細については、他の回答を参照してください。