ローカルサーバーには、事前定義された環境変数()にパスワードを格納するプログラムがありますSPECIAL_PASSWORD
。
リモートサーバーには、事前定義された環境変数()からパスワードを読み取って使用するプログラムがありますSPECIAL_PASSWORD
。
リモートサーバーでプログラムを実行し、ローカル環境で設定したパスワードを入力したいと思います。
私の試みは次のとおりです。
local_command # produces the SPECIAL_PASSWORD Env Var
ssh -l remote_user remote_server <<EOSSH
export SPECIAL_PASSWORD=${SPECIAL_PASSWORD} # Transfer Env Var
remote_command # consumes SPECIAL_PASSWORD Env Var
EOSSH
また、期待通りに動作するようです。
- Unixは
ps
パスワードを漏らさないようです - 現在のプロセスまたはそのサブプロセスのみがパスワードにアクセスできます。
しかし、これは本当に安全ですか?パスワードをいつも読めますか?より良いオプションはありますか?
上記のトリックなしで環境変数のサブセットを転送できるようにsshd_config
(AcceptEnv
)とssh_config
()を変更できます。SendEnv
ただし、システムは厳密に制御され、sshd_configには管理者の介入が必要です。私の場合は変更できませんsshd_config
。
修正する
私は実行中のリモートSSHコマンドにデータを送信することによって提供される他のソリューションを使用しています。この構文は HERE ドキュメントでは使用されなくなりました。
sendEnv() {
echo "var1=${var1}"
echo "var2=${var2}"
...
}
sendEnv | ssh -l remote_user remote_server "receiving_command".
私の場合はreceiving_command
。System.in
それは魅力のように動作します。
ベストアンサー1
remote_user
とで読むことができますroot
。remote_command
誰もが読めるファイルや同様のファイルに書かない限り、他に何もありません。
/proc
ファイルシステムのプロセス環境を確認できます/proc/$pid/environ
。ファイルの権限はデフォルトでに設定されているので、euid
同じユーザーでなければ$pid
なりません。root
-r-- --- ---
stdin
環境を使用することに加えてssh
。 sshにパイプすると、私が知っている限り、ルートとターゲットプログラム(およびそのサブルーチン)だけにアクセスできます(仮定$(cat /proc/sys/kernel/yama/ptrace_scope) == 1
)。