web-dev-qa-db-ja.com

SSHクライアントがTERM環境変数をサーバーに渡さないようにしますか?

私は現在 Fedora 18 gnome-terminal を使用していて、その中で tmux マルチプレクサを開始しています。 sshコマンドを使用して CentOS 5サーバーに接続した後、次のことがわかりました。

  • ls結果に色がありません
  • tmuxscreenhexedithtopはすべて次のようなエラーメッセージで開始できませんでした:
    端末を開くことができませんでした:見つからないか不適切な端末:screen-256color

sshは$ TERM環境変数をサーバーに渡しているようですが、Fedora 18の/etc/ssh/ssh_configファイルでは見つかりません。

サーバー上の$ TERM変数を手動で変更することはできますが、接続するたびに再び発生します。それを防ぐ方法は?

21
LiuYan 刘研

$TERMは、どの端末に話しているかをアプリケーションに通知して、どの端末に話しかけるかを知らせます。

これをリモートホストでサポートされている値に変更します。この値は、端末(screen)にできるだけ一致します。

ほとんどのLinuxシステムには、少なくともscreen terminfoエントリが必要です。そうでない場合、screenvt100のスーパーセットを実装し、vt100はユニバーサルです。そう:

TERM=screen ssh Host

または

TERM=vt100 ssh Host

256色のサポートが必要な場合は、xterm-256colorを試してみてください(screenxtermと同じように256色をサポートしています)。ターミナルアプリケーションがサポートしていることをアプリケーションに伝えます。 256色とそれらを使用する方法を教えてください。

または、リモートホストにterminfoエントリをインストールできます。

infocmp -x | ssh -t root@remote-Host '
  cat > "$TERM.info" && tic -x "$TERM.info"'
18

私の場合、ローカルデスクトップの.zshrc(bashを使用している場合は.bashrc)にエイリアスを追加するだけです。

alias ssh='TERM=xterm ssh'

エイリアスを既に使用している場合は、環境割り当てを含めるようにエイリアスを調整します。

10
zaTricky

これを.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変数が変更される理由を不思議に思って壁にぶつからないように、メモを出力します。

1
depquid

変更$TERMは機能するかもしれませんが、これはお勧めしません。これは解決策ではなく回避策にすぎません。

私のシステムでこの問題が発生した場合は、最も一般的な端末タイプのサポートをリモートシステムにインストールすることで修正します。

  • yum install ncurses-base ために screen-256color CentOS
  • yum install ncurses-term ために screen-256color-bce CentOS
  • apt install ncurses-base 両方のための screen-256colorおよびscreen-256color-bce Debian、Ubuntu、ミント

Ncurses関連のパッケージは、他の多くの端末もサポートし、他のすべての大規模ディストリビューションでも利用できます。 (しかし、私のユースケースとあなたの質問にはこれで十分です)

1
Garo

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アクセスがある場合)。詳細については、他の回答を参照してください。

0
michas