SSHクライアントがTERM環境変数をサーバーに渡すのを防ぎますか?

SSHクライアントがTERM環境変数をサーバーに渡すのを防ぎますか?

私は現在使用していますFedoraの帽子18GNOME端末、そしてスタートtmuxマルチプレクサがその一つです。つながると中央オペレーティングシステムコマンド5 serverを介して次のものがssh見つかりました。

  • ls結果は色がありません
  • tmux、、、、screenすべて開始できませんhexedithtopエラーメッセージは次のとおりです。
    端末を開けませんでした:端末が存在しないか不適切です:screen-256color

$ TERM環境変数がサーバーに渡されるようですが、sshFedora 18のドキュメントにはありません。/etc/ssh/ssh_config

サーバーで$ TERM変数を手動で変更できますが、接続するたびにこれが再発生します。それでは、このようなことが起こらないように、どのように防ぐことができますか?

答え1

$TERM通信する方法を知るために、どの端末と通信しているかをアプリケーションに伝えます。

リモートホストがサポートし、端末にできるだけ一致する値に変更します(screen)。

ほとんどのLinuxシステムには少なくとも1つのscreenterminfoエントリが必要です。それ以外の場合、screenこれは実装の親セットであり、vt100普遍vt100的です。だから:

TERM=screen ssh host

または

TERM=vt100 ssh host

256色のサポートが必要な場合は、xterm-256color十分に近い色を試してみてください(screen同じ方法で256色のサポートxterm)、端末アプリケーションが256色をサポートしていることをアプリケーションに知らせ、使用方法を知らせることができます。

あるいは、リモートホストにterminfoエントリをインストールすることもできます。

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

答え2

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

alias ssh='TERM=xterm ssh'

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

答え3

変更すると$TERM効果があるかもしれませんが、お勧めできません。これは回避策であり、解決策ではありません。

私のシステムでこの問題が発生したときに、リモートシステムに最も一般的な端末タイプのサポートをインストールして問題を解決しました。

  • yum install ncurses-basescreen-256colorCentOSで利用可能
  • yum install ncurses-termscreen-256color-bceCentOSで利用可能
  • apt install ncurses-baseDebian、Ubuntu、Mintscreen-256colorで利用可能screen-256color-bce

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

答え4

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アクセス権があると仮定)。詳しくは他の回答をご覧ください。

関連情報