私は現在使用していますFedoraの帽子18GNOME端末、そしてスタートtmux
マルチプレクサがその一つです。つながると中央オペレーティングシステムコマンド5 serverを介して次のものがssh
見つかりました。
ls
結果は色がありませんtmux
、、、、screen
すべて開始できませんhexedit
。htop
エラーメッセージは次のとおりです。端末を開けませんでした:端末が存在しないか不適切です:screen-256color
$ TERM環境変数がサーバーに渡されるようですが、ssh
Fedora 18のドキュメントにはありません。/etc/ssh/ssh_config
サーバーで$ TERM変数を手動で変更できますが、接続するたびにこれが再発生します。それでは、このようなことが起こらないように、どのように防ぐことができますか?
答え1
$TERM
通信する方法を知るために、どの端末と通信しているかをアプリケーションに伝えます。
リモートホストがサポートし、端末にできるだけ一致する値に変更します(screen
)。
ほとんどのLinuxシステムには少なくとも1つのscreen
terminfoエントリが必要です。それ以外の場合、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-base
screen-256color
CentOSで利用可能yum install ncurses-term
screen-256color-bce
CentOSで利用可能apt install ncurses-base
Debian、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アクセス権があると仮定)。詳しくは他の回答をご覧ください。