私はいくつかの異なるサーバーで作業しており、SSHですべてのサーバーでアクティブになるように環境変数を設定できると便利です。問題は、一部の変数の内容に機密情報が含まれていることですパスワード)、そして.bashrcファイルに横たわらせたくはありません-メモリにのみ保持したいと思います。
SSHを使用してDISPLAY変数(ForwardX11経由)またはSSHエージェントプロセス(ForwardAgent経由)を転送できることを知っているので、SSH接続を介して任意の環境変数の内容を自動的に転送する方法があるかどうか疑問に思っています。理想的には、必要なときに自動的に実行されるように、.ssh/configファイルに設定できるものがあります。何か案は?
可能ですが、サーバー構成の変更が必要です。
sshd_config(5) のAcceptEnv
のエントリと ssh_config(5) のSendEnv
のエントリを読み取ります。
update:
コマンドラインで渡すこともできます:
ssh foo@Host "FOO=foo BAR=bar doz"
セキュリティに関しては、リモートマシンにアクセスできる人は、実行中のプロセスに渡される環境変数を見ることができることに注意してください。
その情報を秘密にしたい場合は、stdin
を介して渡すことをお勧めします。
cat secret_info | ssh foo@Host remote_program
自動的に実行することはできません($DISPLAY
はXauth情報とともに-X
で転送できるため、リモートプログラムが実際にディスプレイに接続できるようになります)。ただし、「here資料":
ssh ... <<EOF
export FOO="$FOO" BAR="$BAR" PATH="\$HOME/bin:\$PATH"
runRemoteCommand
EOF
エスケープされていない変数はローカルに展開され、結果がリモート側に送信されます。したがって、PATH
は$HOME
のリモート値で設定されます。
THIS IS A SECURITY RISK同じコンピューター上のすべてのプロセスの環境変数を誰でも見ることができるため、このようなパスワードのような機密情報を送信しないでください。
何かのようなもの:
ssh user@Host bash -c "set -e; $(env); . thescript.sh"
...動作する可能性があります(テストなし)
ちょっとしたハックですが、何らかの理由でサーバーの設定を変更できない場合は動作する可能性があります。