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

sin*_*boy 39 ssh forwarding environment-variables

我使用几个不同的服务器,能够设置一些环境变量,以便在我进入SSH时它们在所有环境变量上都是活动的.这个问题是,一些变量的内容包含敏感信息(散列)密码),所以我不想让它躺在.bashrc文件中 - 我只想把它保存在内存中.

我知道你可以使用SSH来转发DISPLAY变量(通过ForwardX11)或SSH代理进程(通过ForwardAgent),所以我想知道是否有办法在SSH连接中自动转发任意环境变量的内容.理想情况下,我可以在.ssh/config文件中设置一些内容,以便在需要时自动运行.有任何想法吗?

sal*_*lva 34

您可以,但它需要更改服务器配置.

阅读条目AcceptEnv的sshd_config(5)SendEnvssh_config中(5) .

更新:

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

ssh foo@host "FOO=foo BAR=bar doz"
Run Code Online (Sandbox Code Playgroud)

关于安全性,请注意,任何有权访问远程计算机的人都能看到传递给任何正在运行的进程的环境变量.

如果你想保密信息,最好通过它stdin:

cat secret_info | ssh foo@host remote_program
Run Code Online (Sandbox Code Playgroud)

  • 我花了一段时间才想起我必须重新启动 sshd 才能让它重新读取其配置文件,但是一旦我这样做了,“AcceptEnv”和“SendEnv”就像一个魅力。正是我一直在寻找的东西!谢谢! (2认同)

Aar*_*lla 14

您无法自动执行此操作(除非$DISPLAY您可以将其-X与Xauth信息一起转发,以便远程程序可以实际连接到您的显示器),但您可以使用带有"此处文档"的脚本:

ssh ... <<EOF
export FOO="$FOO" BAR="$BAR" PATH="\$HOME/bin:\$PATH"
runRemoteCommand
EOF
Run Code Online (Sandbox Code Playgroud)

未转义的变量将在本地扩展,结果将传输到远程端.所以PATH将使用远程值设置$HOME.

  • @Kamafeather:确实,[似乎](https://security.stackexchange.com/questions/14000/environment-variable-accessibility-in-linux)只有运行进程的用户和“root”才能看到其环境。这有很大的不同。我应该删除我的评论。 (2认同)