ssh -nq -tが私の環境変数を見ることができないのはなぜですか?

ssh -nq -tが私の環境変数を見ることができないのはなぜですか?

-tフラグを使用してリモートシステムでコマンドを実行しています(コマンドがプロンプトを「ブロック」するのを防ぐために)(とにかくこのように動作します)。だから私は使用していますが、これを行うと、ssh -nq -t root@ipスクリプトは私が使用している環境変数を見つけることができません。

なぜこれが起こり、それを防ぐ方法は何ですか?

答え1

編集する

sshコンピュータに入り、ログインシェルを起動するコマンドを実行すると、次の情報が有効になります。

ssh root@ip
echo $XXXX_LICENSE_FILE

sshコマンド(ssh root@ip echo $XXXX_LICENSE_FILE)から直接変数にアクセスしようとすると非ログイン、非対話型この場合、シェルは読んでも~/.bash_profile読みません~/.bashrcbashマニュアルページから:

   When bash is started non-interactively, to run a shell script,
   for  example,  it looks for the variable BASH_ENV in the envi‐
   ronment, expands its value if it appears there, and  uses  the
   expanded  value  as  the  name  of a file to read and execute.
   Bash behaves as if the following command were executed:
          if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
   but the value of the PATH variable is not used to  search  for
   the file name.

最も簡単な解決策は、単にsshコマンドで変数を宣言することです。これを行うには、リモート/etc/ssh/sshd_configファイルに次の行を追加する必要があります。

PermitUserEnvironment yes

その後、ローカルコンピュータで実行します。

XXXX_LICENSE_FILE=/etc/xxxx.lic && ssh -nq -t -t -t root@$ip /etc/init.d/xxxx.rc start

ここでの問題は、ログインシェルと対話型シェルの違いです。バラよりここ良いまとめです。

~/.bashrc起動時に読み取り専用インタラクティブ(非ログイン)シェル。sshリモートコンピュータに入ると実行中です。ログインシェルso~/.bash_profileまたは(順番に)を読みます~/.bash_login。リモートサーバーにログインして実行して確認できます。これにより、環境変数を読み取って設定する対話型シェルが起動します。~/.profilebash~/.bashrc

この問題を解決するには、代わりにこれを追加して~/.bash_profileください~/.bashrc


.bashrc変数をローカルではなくリモートに設定したとします。輸出したい場合地元の変数の終わりssh、参照協会出版社:Frederik Deweerdt。最も簡単な方法は、呼び出しに変数を含めることですssh

ssh -nq -t root@ip "FOO=foo BAR=bar"

関連情報