我使用几个不同的服务器,能够设置一些环境变量,以便在我SSH时它们在所有这些变量上都是活动的。这个问题是,一些变量的内容包含敏感信息信息(散列密码),所以我不想让它留在.bashrc文件中 - 我只想把它保存在内存中。
我知道您可以使用SSH转发DISPLAY变量(通过ForwardX11)或SSH代理程序(通过ForwardAgent),所以我想知道是否有办法在SSH连接中自动转发任意环境变量的内容。理想情况下,我可以在.ssh / config文件中设置一些内容,以便在需要时自动运行。有什么想法吗?
答案 0 :(得分:32)
您可以,但需要更改服务器配置。
阅读sshd_config(5)中的AcceptEnv
和ssh_config(5)中SendEnv
的条目。
<强>更新强>:
您也可以在命令行上传递它们:
ssh foo@host "FOO=foo BAR=bar doz"
关于安全性,请注意,任何有权访问远程计算机的人都可以看到传递给任何正在运行的进程的环境变量。
如果您想保密该信息,最好通过stdin
:
cat secret_info | ssh foo@host remote_program
答案 1 :(得分:12)
您无法自动执行此操作($DISPLAY
可以转发-X
以及您的Xauth信息,因此远程程序可以实际连接到您的显示器)但您可以使用脚本“这里的文件”:
ssh ... <<EOF
export FOO="$FOO" BAR="$BAR" PATH="\$HOME/bin:\$PATH"
runRemoteCommand
EOF
未转义的变量将在本地扩展,结果将传输到远程端。因此,PATH
将使用远程值$HOME
进行设置。
这是一种安全风险不要以这种方式传输密码等敏感信息,因为任何人都可以在同一台计算机上看到每个进程的环境变量。
答案 2 :(得分:0)
类似的东西:
ssh user@host bash -c "set -e; $(env); . thescript.sh"
...可能会工作(未试用)
有点骇人听闻,但如果您由于某种原因无法更改服务器配置,则可能会起作用。