![](/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.