リモートコマンドで使用するためにSSHを介してパスワードを安全に送信する方法

リモートコマンドで使用するためにSSHを介してパスワードを安全に送信する方法

ローカルサーバーには、事前定義された環境変数()にパスワードを格納するプログラムがあります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

また、期待通りに動作するようです。

  1. Unixはpsパスワードを漏らさないようです
  2. 現在のプロセスまたはそのサブプロセスのみがパスワードにアクセスできます。

しかし、これは本当に安全ですか?パスワードをいつも読めますか?より良いオプションはありますか?

上記のトリックなしで環境変数のサブセットを転送できるようにsshd_configAcceptEnv)と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_commandSystem.in

それは魅力のように動作します。

ベストアンサー1

remote_userとで読むことができますrootremote_command誰もが読めるファイルや同様のファイルに書かない限り、他に何もありません。

/procファイルシステムのプロセス環境を確認できます/proc/$pid/environ。ファイルの権限はデフォルトでに設定されているので、euid同じユーザーでなければ$pidなりません。root-r-- --- ---

stdin環境を使用することに加えてssh。 sshにパイプすると、私が知っている限り、ルートとターゲットプログラム(およびそのサブルーチン)だけにアクセスできます(仮定$(cat /proc/sys/kernel/yama/ptrace_scope) == 1)。

おすすめ記事