web-dev-qa-db-ja.com

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

私のローカルターミナルでは、TERM = konsole-256colorを使用していますが、接続するすべてのリモートマシンがこの定義を持っているわけではありません。

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

22
user13185

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

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

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

8
Paweł Brodacki
TERM=vt100 ssh some.Host.name

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

7
O G

ここに私が一緒に投げた私の迅速で汚い解決策があります。私はもっ​​と良いものを好みます。代わりにシェルスクリプトを使用できると思います。 TERM値の調整は、読者への課題として残されています。

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

理想的には、反対側でTERMをチェックするようなことを行い、ControlPersistを使用して複数の接続による長い遅延を防止します。

5
docwhat