我可以通过ssh转发环境变量吗?

我可以通过ssh转发环境变量吗?,ssh,environment-variables,forwarding,Ssh,Environment Variables,Forwarding,我使用多个不同的服务器,如果能够设置一些环境变量,使它们在我使用SSH时在所有服务器上都处于活动状态,这将非常有用。问题是,一些变量的内容包含敏感信息(散列密码),因此我不想将其放在.bashrc文件中--我只想将其保存在内存中 我知道可以使用SSH转发显示变量(通过ForwardX11)或SSH代理进程(通过ForwardAgent),因此我想知道是否有一种方法可以跨SSH连接自动转发任意环境变量的内容。理想情况下,我可以在.ssh/config文件中设置一些内容,以便在需要时自动运行。有什么

我使用多个不同的服务器,如果能够设置一些环境变量,使它们在我使用SSH时在所有服务器上都处于活动状态,这将非常有用。问题是,一些变量的内容包含敏感信息(散列密码),因此我不想将其放在.bashrc文件中--我只想将其保存在内存中


我知道可以使用SSH转发显示变量(通过ForwardX11)或SSH代理进程(通过ForwardAgent),因此我想知道是否有一种方法可以跨SSH连接自动转发任意环境变量的内容。理想情况下,我可以在.ssh/config文件中设置一些内容,以便在需要时自动运行。有什么想法吗?

您不能自动执行此操作(除了
$DISPLAY
,您可以使用
-X
和您的Xauth信息转发它,以便远程程序可以实际连接到您的显示器),但您可以使用带有“此处文档”的脚本:


ssh 可以,但需要更改服务器配置

阅读中的
AcceptEnv
和中的
SendEnv
条目

更新

也可以在命令行上传递它们:

ssh foo@host "FOO=foo BAR=bar doz"
关于安全性,请注意,任何有权访问远程计算机的人都将能够看到传递给任何正在运行的进程的环境变量

如果您想对该信息保密,最好通过
stdin

cat secret_info | ssh foo@host remote_program
比如:

sshuser@hostbash-c“set-e;$(env);.thescript.sh”

…可能有效(未经测试)


有点麻烦,但如果由于某种原因无法更改服务器配置,它可能会工作。

我花了一点时间才想起我必须重新启动sshd以使其重新读取其配置文件,但一旦我这样做,
AcceptEnv
SendEnv
就发挥了巨大的作用。正是我要找的!谢谢
unscaped变量将在本地展开
part saved my day。其他手册中没有对此进行解释。谢谢大家!@reinierpost您确定这是一种安全风险吗?那么呢?@Kamafeather:事实上,只有运行进程和
root
的用户才能看到它的环境。这有很大的不同。我应该删除我的评论。
ssh#打开ssh连接
user@host#当用户托管
时,ssh接受一个命令,因此我们运行:
bash-c#-c说运行以下参数作为命令(与文件相反)
set-e#不需要,但会导致shell在出现错误时退出env打印所有环境变量,然后将其设置为正在运行的命令的一部分。script.sh#在我们刚刚设置的环境中运行此脚本。
cat secret_info | ssh foo@host remote_program