![](/img/trans.png)
[英]Execute bash command stored in associative array over SSH, store result
[英]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.