作为一个学习项目,我正在编写一个小 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 命令执行远程主机上的所有内容并只返回我想要的字符串?
您可以使用以下代码在远程工作站上执行所需的命令并检索 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
变量中。