You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用-J(跳转主机)时ssh SendEnv失效,如何传递环境变量?

SSH跳转主机后环境变量MY_ENV无法传递到目标脚本的解决方法

问题结论

用SSH跳转主机时,环境变量不会自动从本地透传到最终目标服务器——你的SendEnv参数只作用于本地到跳转机的连接,跳转机默认不会把这个变量再转发给目标服务器。结合你的配置,以下是具体排查和解决步骤:


分步排查与解决

1. 先确认本地到跳转机的变量传递正常

先排除前端链路问题,执行这条命令测试:

export MY_ENV=myvalue
ssh -o SendEnv=MY_ENV <myuser@jumpHostIp> 'echo $MY_ENV'
  • 如果能输出myvalue,说明本地到跳转机的传递没问题;
  • 如果不行,检查跳转机/etc/ssh/sshd_config里的AcceptEnv MY_ENV是否配置正确,然后重启跳转机的SSH服务:
    sudo systemctl restart ssh.service
    

2. 让跳转机把变量转发到目标服务器

跳转机的SSH客户端不会自动转发环境变量,需手动配置:

方法1:修改跳转机的SSH配置(持久化)

在跳转机的/home/myuser/.ssh/config里添加一段:

Host <hostIp>
  SendEnv MY_ENV

同时确保跳转机的sshd_config里开启了PermitUserEnvironment yes(未开启的话添加该配置,然后重启SSH服务)。

方法2:本地命令里显式指定转发(临时/灵活)

把-J跳转改成显式的ProxyCommand,给跳转机的SSH进程也加上SendEnv参数:

export MY_ENV=myvalue
ssh -o StrictHostKeyChecking=yes -o SendEnv=MY_ENV \
  -o ProxyCommand="ssh -o SendEnv=MY_ENV <myuser@jumpHostIp> -W %h:%p" \
  <myuser@hostIp>

这种方法无需修改跳转机配置,适合临时场景。

3. 确保目标服务器的配置生效

目标服务器已配置AcceptEnv MY_ENV,但必须重启SSH服务才能让配置生效:

sudo systemctl restart ssh.service

另外,authorized_keys里的command=会启动受限shell,可在deploy.sh开头添加echo $MY_ENV或env命令,确认变量是否能被脚本读取。


亲测有效的快速解决

我修改了跳转机和目标服务器的/etc/ssh/sshd_config后,执行sudo systemctl restart ssh.service重启SSH服务,环境变量就正常传递到deploy.sh里了。

内容的提问来源于stack exchange,提问作者Tom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 13:18:28