繁体   English   中英

Bash - ssh'ing 到关联数组中的主机

[英]Bash - ssh'ing to hosts in associative array

我正在编写一个脚本,将客户端连接数据(例如 session ID、服务器和端口)存储在关联数组中。 我需要将 ssh 安装到这些主机上,然后运行 lsof 命令来查找正在使用该端口的进程。

declare -A HOSTMAP
HOSTMAP[session]=$session_ids
HOSTMAP[cname]=$cnames
HOSTMAP[port]=$ports

打印时,数组中的数据显示为这样(主机名和端口已更改以保护无辜者)

for g in "${!HOSTMAP[@]}"
do
   printf "[%s]=%s\n" "$g" "${HOSTMAP[$g]}"
done
[cname]=hostname1
hostname2
hostname3
hostname4
hostname5
hostname6
hostname7
hostname8
[session]=44
5
3
9
14
71
65
47
[port]=11111
22222
33333
44444
55555
66666
77777
88888

我想做一个类似于以下的操作:

for session in $session_id
    do
    echo "Discovering application mapped to session ${session} on ${cname}:${port}"
    ssh -tq ${cname} "lsof -Tcp | grep ${port}"
done

非常感谢您就优雅的解决方案提供建议

bash不允许嵌套 arrays。 在这里,我将只使用单独的索引 arrays。 但是,由于您的 session 似乎是一个整数,并且索引的 arrays 是稀疏的,因此您可以使用 session id 作为端口的 cnames 和索引。

cnames=([44]=hostname1 [5]=hostname2 [3]=hostname3)
ports=([44]=1111 [5]=2222 [3]=3333)

for session in "${!cnames[@]}"; do
  cname=${cnames[$session]}
  port=${ports[$session]}
  echo "Discovering application mapped to session ${session} on ${cname}:${port}"
  ssh -tq ${cname} "lsof -Tcp | grep ${port}"
done

您可以将 ssh 的ssh分配给变量

result=$(ssh -tq ${cname} "lsof -Tcp | grep ${port}")

然后你可以从$result中提取你想要的数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM