〜/ .ssh / configからssh_configに設定されたSendEnv変数を無効にする方法


30

私はどこにもそれを見つけることができなかったので、私はそのような問題にぶつかるのは私だけだろうと思っています。

デフォルトでは、Red HatおよびDebianのsshには、少なくともリモートセッションでLC *およびLANG変数を渡すSendEnvオプション付きのssh_configがあります。/ etc / ssh / ssh_configを変更するrootでない場合、どうすればその動作を無効にできますか?SendEnvオプションが蓄積されているようで、リセットする方法がわかりません。

また、質問されるのを避けるために、ロケールをテストマシンに渡さないようにして、ロケールがマシンのデフォルトであることに依存するスクリプトやプログラムへの副作用を回避する必要があります。


これはあなたの質問に対する答えではありませんenvが、ラッパースクリプトを使用して、またはラッパースクリプトを使用して、テストマシンでスクリプトとプログラムを呼び出すことで問題を解決できますか?
スコット

2
はい、回避策は可能ですが、不便です
-akostadinov

回答:


18

あなただけじゃない。に記載されているssh_config(5)ようにSendEnv、設定を解除できません。

複数の環境変数を複数のSendEnvディレクティブに分散させることができます[...]。

AcceptEnvただし、テストマシンにルートがある場合は、クライアントから送信された変数を受け入れないように変更できます。


4
がらくた、私はコマンドラインで-Fだけが助けになるのを見ますが、それは実際に使用するにはあまりにも不便です。参照してくださいbugzilla.mindrot.org/show_bug.cgi?id=1285
akostadinov

5

オーバーライドできない~/.ssh/configため、これは実行できませんSendEnv

エイリアスの使用は、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

1

オプションがありSetEnvLANG送信する前に特定の値に強制することができます。

また、マニュアルページには

パターンの前にを付けることで、以前に設定したSendEnv変数名をクリアすることができ-ます。

しかし、私はこの仕事をすることができませんでした。


bugzilla.mindrot.org/show_bug.cgi?id=1285を参照してください。おそらく、この-アプローチが機能しなかった理由を説明しているでしょう。ただし、ssh configでリモートLANGおよびその他の変数をハードコードすることをお勧めします。物事をより予測可能にします。SetEnv他の誰もそれについて提案しなかったので、おそらく新しい指令です。SetEnv LANG=en_US.UTF-8
アコスタディノフ

0

bashを使用している場合、エイリアスssh = 'LANG = command ssh'を設定して、他のサーバーに渡されるLANGを無効にすることができます。


0

su - youruserssh経由でログインしているときに使用できます。これにより、ユーザーの環境が再初期化されます。

実際には、新しい環境で新しいセッションを初期化します。


質問は、環境を自動的に正気にすることです。また、btw suは常にインストールされるとは限りません。そして、suでパスワードを入力する必要があります。役に立たない。より簡単な回避策があります。
akostadinov

0

によると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.

そのため、コマンドラインで(デフォルトの)構成ファイルを明示的に指定することで、準拠せずに/etc/ssh/ssh_config ssh 実行できます(~/.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

上記の私のコメントをご覧ください。bugzilla.mindrot.org/show_bug.cgi?id=1285 ; これはオプションですが、実際に必要な機能ではありません。if one supplies on command line -F, then the system wide config is ignored according to man page
アコスタディノフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.