web-dev-qa-db-ja.com

ssh経由でenv変数を転送できますか?

私はいくつかの異なるサーバーで作業しており、SSHですべてのサーバーでアクティブになるように環境変数を設定できると便利です。問題は、一部の変数の内容に機密情報が含まれていることですパスワード)、そして.bashrcファイルに横たわらせたくはありません-メモリにのみ保持したいと思います。

SSHを使用してDISPLAY変数(ForwardX11経由)またはSSHエージェントプロセス(ForwardAgent経由)を転送できることを知っているので、SSH接続を介して任意の環境変数の内容を自動的に転送する方法があるかどうか疑問に思っています。理想的には、必要なときに自動的に実行されるように、.ssh/configファイルに設定できるものがあります。何か案は?

39
singingwolfboy

可能ですが、サーバー構成の変更が必要です。

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
34
salva

自動的に実行することはできません($DISPLAYはXauth情報とともに-Xで転送できるため、リモートプログラムが実際にディスプレイに接続できるようになります)。ただし、「here資料":

ssh ... <<EOF
export FOO="$FOO" BAR="$BAR" PATH="\$HOME/bin:\$PATH"
runRemoteCommand
EOF

エスケープされていない変数はローカルに展開され、結果がリモート側に送信されます。したがって、PATH$HOMEのリモート値で設定されます。

THIS IS A SECURITY RISK同じコンピューター上のすべてのプロセスの環境変数を誰でも見ることができるため、このようなパスワードのような機密情報を送信しないでください。

14
Aaron Digulla

何かのようなもの:

ssh user@Host bash -c "set -e; $(env); . thescript.sh"

...動作する可能性があります(テストなし)

ちょっとしたハックですが、何らかの理由でサーバーの設定を変更できない場合は動作する可能性があります。

0