将环境变量传递到 ssh 连接

将环境变量传递到 ssh 连接

我想将环境变量传递给 ssh 连接。它们应该动态传递,因此将它们硬编码到 ssh 的配置文件中对我来说不起作用。

我试过这个:

   AAA="tatata" ssh my_user@my_server.com
   echo $AAA
   ====> (empty)

怎么做?

答案1

ssh 仅TERM通过 (+ 传递环境变量LANG,并且LC_*在许多默认配置中^1)。更改服务器的配置以接受任何环境变量可能会产生严重后果(允许用户绕过其登录 shell 和任何ForceCommand),并且你不应该这样做

您可以将它们设置在右侧,作为“远程命令”参数的一部分,并显式启动交互式登录 shell,而不是尝试通过 ssh 传递它们:

ssh -t user@host AAA=tatata bash -l

-t选项是让ssh分配一个伪终端,当指定远程命令时,默认情况下它不会执行此操作。 bash 的选项-l是让它运行一个登录 shell,即让它 source ~/.bash_login,并尽可能模拟它在没有为 ssh 指定远程命令参数时的运行方式。

由于环境变量的值将在本地和远程端扩展两次,因此您应该双引号他们,这可能会很快变得令人讨厌:

ssh -t user@host PRICE=\\\$19 bash -l

但是如果您的配置允许LC_*环境变量通过,您可以这样命名您的变量;-)

LC_AAA=tatata ssh user@host

或者,如果你的 ssh客户配置不包含LC_*SendEnv

LC_AAA=tatata ssh -o SendEnv=LC_AAA user@host

^1为了能够通过 ssh 传递额外的环境变量,AcceptEnv服务器和SendEnv客户端上都需要。在中查找这些指令,ssh*_config看看它们在您的系统上的默认值是什么。

相关内容