簡體   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