sshを呼び出すときに$ TERMの値を変更することは可能ですか?


21

私のローカル端末にはTERM = konsole-256colorがありますが、接続するすべてのリモートマシンにこの定義があるわけではありません。

sshにリモートマシンのTERMを変更させることは可能ですか?ローカルデスクトップの構成を変更するだけで、リモートマシンの.bash *スクリプトを変更しませんか?

回答:


9

次のエイリアスを.bashrcファイルに追加しました。OGの回答を使用しますが、エイリアスでラップします。魅力のように動作します;)

# Force xterm-color on ssh sessions
alias ssh='TERM=xterm-color ssh'

これは、端末からsshを使用する場合に機能します。しかし、sshを実行するスクリプトもいくつかありますが、それらのエイリアスは展開されません。それぞれのエイリアスを個別に作成しないようにする方法はありますか?
Thayneの

スクリプトに特定のTERM値が必要な場合は、その変数をスクリプト自体に設定するのが最善だと思います。それともオプションではありませんか?
ヨハン

それは本当にオプションではありません。また、これらのスクリプトはいくつかのパラメーターに基づいてサーバーを選択し、そのサーバー(または場合によってはtmuxセッションのサーバー)へのsshセッションを開きます。スクリプト自体はTERM値に依存しません。
Thayneの

その場合、次のようにしてbashプロファイルまたは別のエイリアススクリプトをスクリプトに含めることができます。ソース〜/ .bash_aliases
ヨハン

7
TERM=vt100 ssh some.host.name

リモートで、echo $ TERMを実行します。


私はそれについてですが、私はsshのホストのサブセットのみに設定したいので、TERM = ... sshを常に発行しても機能しません。また、どのホストが古いtermcap情報を持っているかを覚えておいて、その場でコマンドを変更するのも良くありません。

ホストごとの構成は/ etc / ssh / ssh_configでのみサポートされていますが、ホストごとの端末スキーママッピングをサポートするための構成値はわかりません。
OG

〜/ .ssh / configでも実行できますが、これは知っていますが、リモートサーバーに送信された環境を変更するオプションが見つかりません。私は何かを逃したことを望んでいた。

7

男ssh:

     ssh reads ~/.ssh/environment, and adds lines of the format
     “VARNAME=value” to the environment if the file exists and users are
     allowed to change their environment.  For more information, see the
     PermitUserEnvironment option in sshd_config(5).

編集:

ラット、私はそれがローカル側にあることを望みました、まだ、意志があれば、方法があります。男ssh_conf:

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の構成に応じて、「リモートファイル変更なし」の要件を満たす場合と満たさない場合があります。


1
はい。ただし、これはリモート側の構成であり、ローカルエンドでのみ変更されるものが必要です。

4
SendEnvは関係ありません。追加のenv変数を送信することできますが、1。変数を変更できません。2。SendEnvにリストされていなくても、とにかくTERMが送信されます。

5

ここに私が一緒に投げた私の迅速で汚いソリューションがあります。もっと良いものが好きです。代わりにシェルスクリプトを使用できると思います。TERM値の調整は、読者の練習として残しておきます。

# To move into a separate plugin...
function ssh {
   if [[ "${TERM}" = screen* || konsole* ]]; then
     env TERM=screen ssh "$@"
   else
     ssh "$@"
   fi
}

理想的には、相手側のTERMをチェックするようなことをしてControlPersist、複数の接続の長い遅延を防ぐためにそれらを使用します。


ありがとう!私はこのようなことを$TERMしましたが、if/ elseコンストラクトで特定の値をチェックする代わり$(echo -n "$TERM" | sed -e s/tmux/screen/)に、ローカル用語の問題のある「tmux」をより広く受け入れられている「スクリーン」タイプに無条件に置き換えるために使用しています(ソースはこちら)。
wincent
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.