YoY*_*oYo 6 security bash password ssh environment-variables
在本地服务器上,我有一个程序将密码存储在预定义的环境变量(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
Run Code Online (Sandbox Code Playgroud)
它似乎也按预期工作:
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".
Run Code Online (Sandbox Code Playgroud)
就我而言,这receiving_command是一个 java 程序,它从System.in.
它就像一个魅力。
它可由remote_user和读取root。没有别的,除非remote_command将其写入全局可读文件或类似的文件。
/proc您可以检查文件系统中进程的环境/proc/$pid/environ。您要么需要与euidof是同一用户,$pid要么需要是root,因为该文件的权限似乎默认为-r-- --- ---。
除了使用环境之外,您还可以stdin通过管道传递密码 via ssh。如果您通过管道进入 ssh,据我所知,只有 root 和目标程序(及其子程序)才能访问它(假设$(cat /proc/sys/kernel/yama/ptrace_scope) == 1)。
| 归档时间: |
|
| 查看次数: |
1880 次 |
| 最近记录: |