ubuntuusers.de

mit SH Skript Login per SSH auf Accespoint (HP Enterprise)

Status: Gelöst | Ubuntu-Version: Ubuntu GNOME 22.04 (Jammy Jellyfish)
Antworten |

deAchte

Anmeldungsdatum:
17. Juli 2023

Beiträge: 4

Hallo, ich bin totaler Anfänger was das schreiben von Skripten angeht. Ich benötige ein sh Skript, dass sich per SSH auf meinem Accespoint einloggt und einen Befehl ausführt. Das Ergebnis soll dann in eine Datei geschrieben werden und jedes mal beim auslösen überschrieben.

Es handelt sich um einen HP Aruba Instant 325 Accespoint. Mit folgenden Daten kann ich mir mit Putty oder über die Konsole in Linux die aktuell verbunden Clients anzeigen lassen: "show clients"

ich habe schon etliche versuche unternommen. Unter anderem sowas:

#/bin/sh
IP="192.168.178.54"
PW="password"
BN="admin"

SW=$(sshpass -p $PW scp -o StrictHostKeyChecking=no $BN@$IP:show clients && sed -nr  Cients.dat)
echo $SW

Kann mir irgendjemand helfen oder hat jemand eine bessere Idee?

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4450

Wohnort: Göttingen

Am Besten solltest Du als erstes mal schauen, ob der Access-Point mit SSH-Keys umgehen kann. Dann sparst Du Dir den ganzen Passwort-Kram mit ssh-pass: SSH (Abschnitt „Public-Key-Authentifizierung“).

Wenn das soweit eingerichtet ist, kannst Du auf dem Access-point einfach ein Kommando so ausführen:

ssh $user@$ip "Kommando"

shiro Team-Icon

Supporter

Anmeldungsdatum:
20. Juli 2020

Beiträge: 1247

Ehrlich gesagt habe ich nicht verstanden, was du wirklich machen willst. Ich vermute, du willst die Ausgabe des auf dem remote Rechner abgegebenen Befehls "show clients" haben und ihn eventuell weiter verarbeiten.

Der "scp" Befehl dient aber nur dem kopieren einer Datei über die "ssh" Strecke. Ich vermute mal, dass du eher einen Befehl absetzten willst wie:

$ sshpass -p $PW ssh $BN@$IP show clients | sed 's/gesuchter Text/neuer Text/'

Es wäre schon hilfreich, wenn du ein Beispiel mit anonymisierten Daten mal in einem Code-Block (in der Menue-Zeile "<>") liefern würdest.

Übrigens ist es sinnvoller mit ssh-Zertifikaten zu arbeiten als über das Passwort. Aber das wäre der nächste Schnritt.

PS: Sorry, sehe grade, dass Doc_Symbiosis schneller war.

deAchte

(Themenstarter)

Anmeldungsdatum:
17. Juli 2023

Beiträge: 4

Hallo,

ich will die Datei dann später weiter auswerten.

Ich habe jetzt ein Skript, mit dem ich es schaffe, dass ich mich einloggen kann und das ich auf meiner Konsole die gewünschte Ausgabe habe. Leider bekomme ich es nicht hin, das in eine Datei zu speichern.

hier das Skript:

#!/usr/bin/expect
#Start SSH session
spawn ssh admin@192.168.178.54
sleep 1




expect {
"*word:" {send "Passwort\r"}
}



#Backup flash
expect {
"#" {send "show clients\r"}
}

SO die Ausgabe:

root@Server:/home/user1# ./test3.sh
spawn ssh admin@192.168.178.54
admin@192.168.0.14's password:

show tech-support and show tech-support supplemental are the two most useful outputs to collect for any kind of troubleshooting session.

IAP-325-1# show clients

Client List
-----------
Name                     IP Address      MAC Address        OS       ESSID                          Access Point  Channel  Type  Role                           IPv6 Address                             Signal    Speed (mbps)
----                     ----------      -----------        --       -----                          ------------  -------  ----  ----                           ------------                             ------    ------------
                         192.168.178.204   dc:91:bf:10:68:24  Android  Wifi1                         IAP-325_4     100E     AC    Wifi1                         fe80::de91:bfff:6e10:f615                46(good)  433(good)

Number of Clients   :29
Info timestamp      :329448
IAP-325-1# root@Server:/home/user1#

Wie könnte ich die Ausgabe in eine Datei speichern?

shiro Team-Icon

Supporter

Anmeldungsdatum:
20. Juli 2020

Beiträge: 1247

Wie könnte ich die Ausgabe in eine Datei speichern?

Du verwendest ein "expect" script. Nutze einfach ein "bash" script, rufe den von mir zuvor geposteten Befehl auf und leite die Ausgabe in eine Datei:

#!/bin/bash
IP="192.168.178.54"
PW="password"
BN="admin"
sshpass -p $PW ssh $BN@$IP show clients >clients.dat

In "clients.dat" hast du dann die Ausgabe stehen.

deAchte

(Themenstarter)

Anmeldungsdatum:
17. Juli 2023

Beiträge: 4

Hallo,

das funktionier leider nicht. Ich bekomme dann folgende Meldung:

Received disconnect from 192.168.178.54 port 22:2: Only cli connections are allowed to the AP

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4450

Wohnort: Göttingen

Was meintest Du denn dann mit "über die Konsole in Linux"? Du kannst Dich schon per SSH auf den AP verbinden, oder?

Für expect könntest Du so etwas verwenden:

exp_internal -f file 0

https://stackoverflow.com/questions/27569885/how-can-i-redirect-debug-information-to-a-text-file-in-an-expect-script

deAchte

(Themenstarter)

Anmeldungsdatum:
17. Juli 2023

Beiträge: 4

Hallo,

ich habe es gelöst:

./Client-Liste.sh > /opt/Clients.txt

shiro Team-Icon

Supporter

Anmeldungsdatum:
20. Juli 2020

Beiträge: 1247

deAchte schrieb:

Received disconnect from 192.168.178.54 port 22:2: Only cli connections are allowed to the AP

Was ist denn das für eine Fehlermeldung? Der "ssh" Befehl ist eine "cli connection". Kannst du mal aus dem Terminal eine "normale cli ssh" Verbindung aufbauen und das Ergebnis in einem Codeblock mitteilen:

ssh -v admin@192.168.178.54

Es gibt für den Aruba-Exoten aber Hinweise im Netz, dass der von dir gesehene Protokoll-Error:2 "normal" ist und nur bei Nutzung von "expect" nicht auftritt (siehe auch >hier<). Aus diesem Grund habe ich folgenden Test gemacht:

$ cat >test.sh << *EOF*
#!/usr/bin/expect
spawn ssh admin@192.168.178.54
sleep 1
expect {
"*word:" {send "Passwort\n"}
}
sleep 1
expect {
"*$ " {send "ls -lrth\n"}
}
sleep 1
expect {
"*$ " {send "exit\n"}
}
*EOF*
$ chmod 777 test.sh
$ ./test.sh >test.log
$ cat test.log |sed -r 's/\o033\[[0-9;]*m//g' 
total 17M
lrwxrwxrwx 1 apache www   13 Feb 22  2015 UnsereOrdner -> /home/0common
-rw-r--r-- 1 shiro  www  17M Aug  4  2015 inhalt.txt
-rw-r--r-- 1 shiro  www  11K Aug  4  2015 dmesg
-rw-r--r-- 1 shiro  www    0 Jan  1  2016 timestamp.xxx
-rwxr-xr-x 1 shiro  www  540 Mar 28  2016 weekday.sh
-rw-r--r-- 1 shiro  www  352 May 15  2017 minidlna.txt
lrwxrwxrwx 1 shiro  www   13 Jun 27  2019 nas -> /home/0common
drwxr-s--- 3 shiro  www 4.0K Aug  5  2021 Temporary Items
drwxr-s--- 3 shiro  www 4.0K Aug  5  2021 Network Trash Folder
$

Wenn das etwa vergleichbar bei dir auch so läuft, würde das auf eine nicht ganz normgerechten "sshd" Implementierung auf dem Aruba-AP deuten. Die im obigen Beispiel gezogene Datei "test.log" kannst du dann wie gewünscht auswerten.

PS: Oh, da war ich wohl ein paar Minuten zu spät. Herzlichen Glückwunsch zum selbst lösen.

Antworten |