44

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

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

4

3 に答える 3

39

可能ですが、サーバー構成を変更する必要があります。

sshd_config(5)およびssh_config(5)のエントリを読み取りAcceptEnvます。SendEnv

更新

コマンドラインでそれらを渡すこともできます。

ssh foo@host "FOO=foo BAR=bar doz"

セキュリティに関しては、リモートマシンにアクセスできる人なら誰でも、実行中のプロセスに渡された環境変数を見ることができることに注意してください。

その情報を秘密にしておきたい場合は、それを通過させることをお勧めしますstdin

cat secret_info | ssh foo@host remote_program
于 2010-12-10T15:04:47.003 に答える
14

自動的に行うことはできませんが(リモートプログラムが実際にディスプレイに接続できるようにXauth情報$DISPLAYと一緒に転送できる場合を除く)、「ヒアドキュメント」でスクリプトを使用できます。-X

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

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

これはセキュリティリスクです。パスワードなどの機密情報をこの方法で送信しないでください。同じコンピュータ上のすべてのプロセスの環境変数を誰でも見ることができるからです。

于 2010-12-10T14:52:42.857 に答える
0

何かのようなもの:

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

...動作する可能性があります(テストされていません)

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

于 2019-01-15T11:57:28.283 に答える