S2S VPN Abfrage optimieren

hpxw

Lieutenant
Registriert
Mai 2008
Beiträge
784
Hallo,

ich betreibe eine Sophos SG und möchte per cli abfragen ob, die Site to Site VPN Verbindung aufgebaut ist oder nicht. Das ganze soll dann von einem Monitoring Tool (Zabbix) abgefragt werden.

cc get_ipsec_status|grep 'REF_IpsSitxxxxxxxx\|all_established'
xxxxxxxx = Verbindungsname

als Ausgabe kriege ich 'all_established' => 1, oder 'all_established' => 0,

Wie kann ich den oberen Befehl optimieren, damit die Ausgabe nur 1 oder 0 ist?
 
Wenn das der befehl ist :
cc get_ipsec_status | grep 'REF_IpsSitxxxxxxxx\|all_established' => Ausgabe 'all_established' 0
könntest du schauen ob AWK z.b funktioniert/installiert ist, wenn ja dann | awk '{print $2}'
cc get_ipsec_status | grep 'REF_IpsSitxxxxxxxx\|all_established' | awk '{print $2}'

ansonsten zb. Cut verwenden
 
  • mit return / exit <zahl> als Rückgabewert arbeiten und if conditionals
  • mit grep "-v" würdest du den "Rest" bekommen - abhängig wie gut/konstant der Abfragestring ist
  • nach grep mit awk oder cut und Angabe des Feldtrenners ("Delimiter") arbeiten - bei Formaten mit AAAA <Feldtrenner> BBBB <Feldtrenner> CCCC ist das ganz praktisch
  • eventuell grep mit RegExp benutzen : Zeilenende könnte sich anbieten
Bsp: grep -o "[0|1]$"
 
Ah auch noch gerade eingefallen - wenn du diese Abfrage in einem Script machst - welches von deinem Monitoring aufgerufen wird/werden würde, kannst du Delimiter auch wie folgt angeben

OIFS=$IFS (speichert aktueller Delimiter - idr " "
IFS='=' (setzt neuer Delimiter hier =)
code here
IFS=$OIFS
 
Alternativ kann man noch ein bisschen mit dem File-Delimiter-Parameter von AWK in Kombination mit sed tricksen (geht zur Not auch via SSH vom Monitoring-Node aus, wenn es auf dem Secure Gateway nicht zur Verfügung steht).

Aussehen täte es dann in etwa so:

Bash:
cc get_ipsec_status | grep 'REF_IpsSitxxxxxxxx\|all_established' | awk -F '=>' '{print $2}' | sed -r -e 's/\s+//g'

'\s+' matched dabei auf mindestens ein Whitespace und entfernt diese, sodass blank '1' oder '0' zurück gegeben werden.
 
das Projekt ist kurz untergegangen und ich bräuchte wieder Hilfe. So tief in Linux stecke ich leider nicht :(

cc get_ipsec_status|grep 'REF_\|all_established' zeigt mir alle Site2Site VPN Verbindungen an

Ausgabe:
'REF_IpsSit1' => {
'all_established' => 1,
'REF_IpsSit3' => {
'all_established' => 1,
'REF_IpsSit3' => {
'all_established' => 1,
'REF_IpsSit4' => {
'all_established' => 1,
'REF_IpsSit5' => {
'all_established' => 1,
'REF_IpsSit6' => {
'all_established' => 1,
'REF_IpsSit7' => {
'all_established' => 1,

Ich bräuchte 7 Befehle mit einzelnen Verbindungsnamen "REF_IpsSitX, bei denen die Ausgabe nur eine "1" angezeigt wird.

Kann mir jemand bitte helfen?
 
Funktioniert den mein Einzeiler oben nicht, wenn du "REF_IpsSitxxxxxxxx" mit "REF_IpsSit1" - "REF_IpsSit7" ersetzt?

Wenn nicht, was kommt den zurück?
 
jain,

als Ausgabe kommt

{
1,
1,
1,
1,
1,
1,
1,

In Zabbix brauche ich nur "1" oder "0"
 
Ah, alles klar: Grund ist hier die Pipe im grep, der ja als Oder fungiert. Probiere mal folgendes aus:

Bash:
cc get_ipsec_status | grep -A1 'REF_IpsSit<x>' | grep 'all_established' | awk -F '=>' '{print $2}' | sed -r -e 's/\s+//g' -e 's/,//g'

Der -A1 Parameter sorgt dafür, dass die nächste Zeile mit ausgegeben wird (das sollte ja all_established sein), der awk gibt die Ziffer nach dem "=>" aus und der sed entfernt das Komma und alle Whitespaces.
 
jetzt kommt nichts aus der Ausgabe
 
Mhm... okay, ist halt doof weil ich keine Sophos zum selbst testen da habe :D

Kannst du denn mal die Ausgabe von
Code:
cc get_ipsec_status | grep -A1 'REF_IpsSit<x>'
posten (kritische Config gerne x-en, es kommt mir mehr auf die Anzahl der Zeilen bis zum nächsten "REF_IpsSit" an)?

Alternativ selbst mal zählen und aus dem -A1 ein -A<Anzahl> machen, dann sollte das vermutlich auch klappen.
 
cc get_ipsec_status | grep -A3 'REF_IpsSit<x>'
'REF_IpsSit<x>' => {
0 => {
0 => {
'established' => 1,

jetzt muss er mir bei der Ausgabe nur 1 oder 0 anzeigen (bei established)
 
Gut, dann probiere jetzt nochmal folgendes:

Code:
cc get_ipsec_status | grep -A3 'REF_IpsSit<x>' | grep 'established' | awk -F '=>' '{print $2}' | sed -r -e 's/\s+//g' -e 's/,//g'

Das müsste jetzt, passend zu deiner Ausgabe, funktionieren :)
 
danke, passt jetzt :)
 
Zurück
Oben