linux远程主机ip,linux – 用于远程收集主机名,IP和主机总内...

这比它需要的要复杂得多.另外,为什么你要用sudo运行ssh?如果你需要以root身份登录到远程,那么你可以这样做(ssh root @ $host)但是你不太可能需要用sudo运行ssh,除非你的ssh密钥都属于root.这是一个非常糟糕的主意.

此外,在我的Arch系统上,您似乎用来获取IP的命令返回我的用户的UID:

$ip route get 1

1.0.0.0 via 192.168.1.1 dev enp0s31f6 src 192.168.1.111 uid 1000

cache

$ip route get 1 | awk '{print $NF;exit}';

1000

它在我测试的Ubuntu上按预期工作:

$ip route get 1

1.0.0.0 via 123.456.7.8 dev eth0 src 123.456.7.9

$ip route get 1 | awk '{print $NF;exit}';

123.456.7.9

所以也许更便携的版本是在src之后打印字段:

$ip route get 1 | sed -nE 's/.* src ([0-9.]+).*/\1/p'

192.168.1.111

你看到的错误确实是因为引用.由于您运行的是ssh $host“command”,因此命令的双引号会导致shell扩展在命令中找到的任何变量(所以像awk的$2等等).为避免这种情况并将未扩展的符号传递给awk,您需要转义$.

一个更简单的脚本版本:

#!/bin/bash

sshOpts="BatchMode=yes -o ConnectTimeout=5"

echo > ip_info.output

echo ""

while read host; do

printf "Hostname:%s" $host

ssh -o $sshOpts $host "printf 'Hostname: %s\nIP: %s\nMem: %s\n' $host "$(ip route get 1 | sed -nE 's/.* src ([0-9.]+).*/\1/p')" "$(free -m | awk '/Mem/{print $2}')""

done < ip_adds

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值