linux环境变量 继承,关于linux:在ssh会话中继承环境变量?

我需要处理很多远程机器,并且每台机器共享一个全局环境变量(

如CONTROLLER_IP)。 当我尝试SSH到远程计算机时,我想设置CONTROLLER_IP

根据当前的本地主机设置。 有什么办法可以实现?

例:

在localhost主机中,我设置了c1 = 192.168.0.1和ofc2 = 192.168.1.1

我需要将其切换到ofs1,ofs2。

我想做类似的事情:

CONTROLLER_IP=$ofc1 ssh root@ofs1; CONTROLLER_IP=$ofc2 ssh root@ofs2

那么我将在每个ssh会话中获得CONTROLLER_IP设置。

(上面显示的代码不起作用...)

是否可以通过ssh转发环境变量?

$ofc1是可疑的。 您确定不只是CONTROLLER_IP=ofc1吗?

不,ofc1只是我的本地主机中的另一个环境变量。

在服务器上的/etc/sshd_config中,可以使用AcceptEnv设置定义可接受的环境变量列表,然后可以发送如下环境变量:

CONTROLLER_IP=$ofc1 ssh -o SendEnv=CONTROLLER_IP root@ofs1

但这对于您的目的来说似乎有些过分了。

另一种方法是在远程命令中传递变量,如下所示:

ssh root@ofs1"CONTROLLER_IP=$ofc1 somecmd"

或者,如果您运行多个远程命令,则如下所示:

ssh root@ofs1"export CONTROLLER_IP=$ofc1; cmd1; cmd2; cmd3; ..."

如果您需要引用变量的值,则可以这样:

ssh root@ofs1"CONTROLLER_IP='$ofc1' somecmd"

尝试

ssh root@ofs1"env CONTROLLER_IP=$ofc1 somescript"

(假设$ofc1被评估为某些IP地址,例如12.234.56.178,没有空格或顽皮的字符)

也许

ssh root@ofs1"env CONTROLLER_IP='$ofc1' somescript"

如果$ofc1可能包含空格或顽皮的字符

其中somescript是远程计算机ofs1上的脚本;如果您想使用交互式外壳,请尝试

ssh root@ofs1"env CONTROLLER_IP='$ofc1' /bin/bash"

最后,ssh通常会设置一些环境变量(在远程计算机上),尤其是SSH_CONNECTION。您可以在远程计算机上使用它。它的第三个字段是原始主机的IP地址(在其上执行ssh ...的地址)。因此,也许远程主机上的.bashrc可能包含

if [ -n"$SSH_CONNECTION" ]; then

export CONTROLLER_IP=$(echo $SSH_CONNECTION|cut -f3 -d' ')

fi

更好的是,使用SSH_CONNECTION用某些内容替换远程脚本中的CONTROLLER_IP事件

我想发送env var的设置,并且仍然能够登录ssh会话。 您的代码仅运行一些命令并退出ssh。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值