我想将环境变量传递给 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
看看它们在您的系统上的默认值是什么。