私はどこにもそれを見つけることができなかったので、私がそのような問題に直面しているのは私だけだと思います。
デフォルトでは、Red HatとDebianのsshには、リモートセッションでLC *およびLANG変数を渡すSendEnvオプションを指定したssh_configがあります。/etc/ssh/ssh_configを変更するrootでない場合、その動作を無効にするにはどうすればよいですか? SendEnvオプションが蓄積されているようで、リセットする方法がわかりません。
質問されないようにするには、テストマシンにロケールを渡さないようにする必要があります。これは、マシンのデフォルトであるロケールに依存するスクリプトやプログラムへの副作用を回避するためです。
あなたは 唯一ではない です。 ssh_config(5)
に記載されているように、SendEnv
を設定解除することはできません。
複数の環境変数が複数のSendEnvディレクティブに分散されている場合があります。
ただし、テストマシンにrootがいる場合は、AcceptEnv
を変更して、クライアントから送信された変数を受け入れないようにすることもできます。
SendEnv
はオーバーライドできないため、これは~/.ssh/config
では実行できません。
エイリアスの使用は、sshを呼び出すスクリプトでは機能しません。
1つの代替方法は、関数をエクスポートすることです。例えば。 ~/.bashrc
:
function ssh() {
LANG="en_US.UTF-8" \
LC_ADDRESS="$LANG" \
LC_IDENTIFICATION="$LANG" \
LC_MEASUREMENT="$LANG" \
LC_MONETARY="$LANG" \
LC_NAME="$LANG" \
LC_NUMERIC="$LANG" \
LC_PAPER="$LANG" \
LC_TELEPHONE="$LANG" \
LC_TIME="$LANG" \
LC_ALL="$LANG" \
/usr/bin/ssh $@
}
export -f ssh
オプションSetEnv
があります。送信する前にLANG
を特定の値に強制できます。
また、manページはそれを言います
パターンの前に
-
を付けると、以前に設定したSendEnv変数名をクリアできます。
しかし、私はこれをうまく機能させることができませんでした。
man ssh
によると:
-F configfile
Specifies an alternative per-user configuration file. If a con-
figuration file is given on the command line, the system-wide
configuration file (/etc/ssh/ssh_config) will be ignored. The
default for the per-user configuration file is ~/.ssh/config.
したがって、ssh /etc/ssh/ssh_config
に準拠せずに、(デフォルトの)構成ファイルをコマンドラインで明示的に指定することで(~/.ssh/config
は空でもかまいません)、次のように指定できます。
$ touch ~/.ssh/config
$ ssh -F ~/.ssh/config your_user@your_Host
~/.bashrc
でエイリアスを作成できます。
alias ssh="ssh -F ~/.ssh/config"
Bashシェルを再起動すると、次のように単純にsshできます。
$ ssh your_user@your_Host
Bashを使用している場合は、エイリアスssh = 'LANG =コマンドssh'を設定して、他のサーバーへのLANGの受け渡しを無効にすることができます。
SSH経由でログインしている場合は、su - youruser
を使用できます。これにより、ユーザーの環境が再初期化されます。
実際には、新しい環境で新しいセッションを初期化します。