次のエイリアスが正確に何をしているのかを理解しようとしています。COUNTER
ユーザーが環境変数を使用できるようにするようnobody
ですが、sshを使用するとCOUNTER=${COUNTER}
前にSendEnv COUNTER
パニックになります。マニュアルページを確認しましたが、何も知りません。
COUNTER=280
...
alias run='COUNTER=${COUNTER} ssh nobody@localhost -o "SendEnv COUNTER"'
SSHなしでこのエイリアスを書き直したいです(無効になっているため)。私が試したことは次のとおりです。しかし、もともとエイリアスの機能を正確に理解していないと、私がやっていることが正しいかどうかはわかりません。
alias run='su - nobody -c "export COUNTER=${COUNTER}"'
答え1
プログラムが実行される前に、同じ行/同じステートメント内の変数に値を割り当てます。一時的に実行中のプログラムの環境に変数をエクスポートします。これは変数をエクスポートする1つの方法です。唯一のプログラム- プログラムが実行されると、そのプログラムはもはや環境に存在せず、後続のプログラムに影響を与えたり使用することはできません。
COUNTER=${COUNTER} ssh ...
$COUNTERを独自に設定し、一時的に環境にエクスポートした後ssh
。中かっこや引用符
COUNTER=$COUNTER
は100%等しいので、その目的を理解していない人が書いたCOUNTER="$COUNTER"
ものかもしれません。この特別なケースでは、なぜこれを実行したくないのかわかりません。バラより$VAR対${VAR}と引用-o "SendEnv COUNTER"
リモートサーバーに送信する必要があるローカル環境変数をssh
知らせるオプション。ssh
デフォルトではTERM
送信のみです(そして、リモートシェル/プログラムを入力してその出力を見ることができる対話型SSH接続など、aa ptyが要求されている場合にのみ)。からman ssh_config
:SendEnv
environ(7)
サーバーに送信するローカル変数を指定します。サーバーもこれをサポートする必要があり、サーバーはこれらの環境変数を受け入れるように構成する必要があります。TERM
擬似端末が要求されるたびに、環境変数は常にプロトコルの要求に従って送信されます。サーバーの構成方法の詳細については、を参照してくださいAcceptEnv
。sshd_config(5)
変数は、ワイルドカード文字を含めることができる名前で指定されます。複数の環境変数をスペースで区切ったり、複数のSendEnv
ディレクティブに分散したりできます。パターンの詳細については、パターンを参照してください。
以前に設定されたSendEnv変数名は、パターンプレフィックスを追加することで消去できます
-
。デフォルトでは、環境変数は送信されません。リモートサーバーは、転送された変数を許可するように設定されていない限り、転送されたすべての変数を無視して無視できます。デフォルトでは
TERM
.fromのみが許可されていますman sshd_config
。AcceptEnv
クライアントが送信した環境変数をセッションにコピーすることを指定します
environ(7)
。クライアントの設定方法については、SendEnv
およびSetEnv
を参照してください。クライアントが疑似端末を要求するたびに、環境変数はプロトコルで必要なため、常に許可されます。ssh_config(5)
TERM
変数は名前で指定され、ワイルドカード文字
*
と?
。複数の環境変数をスペースで区切ったり、複数のAcceptEnvディレクティブにデプロイしたりできます。特定の環境変数は、限られたユーザー環境をバイパスするために使用できます。したがって、このディレクティブを使用するときは注意が必要です。デフォルトでは、環境変数は使用できません。つまり
/etc/ssh/sshd_config
、リモートサーバー(実際にはlocalhost
意味COUNTER=${COUNTER} ssh nobody@localhost -o "SendEnv COUNTER"
です)。ssh nobody@localhost
su - nobody -c "export COUNTER=${COUNTER}
export COUNTER=${COUNTER}
ユーザーNoneとして実行してから終了します(オプションがコマンドを実行するように指示するため)-c
。su
変えるシェルを提供するだけでは、シェルを提供するまで実行されません。)試してCOUNTER="$COUNTER" su - nobody
みてください。または、export COUNTER
実行しているすべてのプログラムの環境に置いてください。