远程工作站上的 BASH 命令返回来自源计算机的结果,而不是远程计算机

问题描述 投票:0回答:1

作为一个学习项目,我正在编写一个小 BASH 脚本,它将列出两个工作站的各种元素。它应该比较执行脚本的机器和传递给脚本的机器。

在脚本的一部分中,我想从两个工作站获取活动网卡的 MAC 地址。

我当前使用的命令仅从本地计算机返回结果,而不是从 ssh 到的计算机返回结果。

我的比较脚本的其他部分正在工作,所以我知道这个概念是有效的,但我认为我在将命令嵌入到其他命令中时遇到了问题。

在本地计算机上,我可以这样做来识别实时网络端口并获取其 MAC 地址:

cat /sys/class/net/$(ip route show default | awk '/default/ {print $5}')/address

但是如果我想获取远程工作站的活动 MAC(并将结果存储在变量中),则 ip Route 命令似乎是在源工作站而不是远程计算机上进行评估。

rMAC=$(ssh $remotehostname "cat /sys/class/net/$(ip route show default | awk '/default/ {print $5}')/address")

有没有办法让 ssh 命令执行远程主机上的所有内容并只返回我想要的字符串?

bash routes ssh scope ip
1个回答
0
投票

您可以使用以下代码在远程工作站上执行所需的命令并检索 MAC 地址:

remotehostname="REMOTE_HOSTNAME"
rMAC=$(ssh $remotehostname "cat /sys/class/net/\$(ip route show default | awk '/default/ {print \$5}')/address")
echo "Remote MAC address: $rMAC"

在此代码中,我在传递到远程主机的命令中转义了美元符号 ($),以防止在本地计算机上过早求值。这样,

ip route
命令将在远程工作站上执行,并且只有结果MAC地址将返回到本地计算机并存储在
rMAC
变量中。

© www.soinside.com 2019 - 2024. All rights reserved.