Ich möchte über ssh eine Verbindung zu bestimmten Geräten in einem Netzwerk herstellen.

Die Voraussetzungen sind:

  1. Es muss einen Befehl ausführen und die Ausgabe der SSH-Sitzung in R (oder in Bash oder einer anderen Programmiersprache, aber ich würde es in R-Sprache bevorzugen) erfassen.

  2. Es muss ein Klartextkennwort eingegeben werden (da auf dieses Gerät zuvor noch nicht zugegriffen wurde und es nicht mit einem RSA-Schlüsselpaar geändert werden kann), damit das Paket ssh.utils diese Anforderung nicht erfüllt

  3. sshpass kann nicht verwendet werden, da ich festgestellt habe, dass es bei einigen von mir getesteten Geräten nicht funktioniert.

Ich habe alle diese Beiträge gelesen, kann aber keinen effektiven Weg finden, um sie auszuführen: Link 1, Link 2, Link 3, Link 4

Ich weiß, dass die Anforderungen schwer zu erfüllen sind, aber ich danke Ihnen für Ihre Bemühungen!

BEARBEITEN:

Entschuldigung, wenn ich mich nicht verständlich gemacht habe. Ich meine, ich arbeite lokal in R und möchte über ssh eine Verbindung zu +3000 Geräten in meinem gesamten Netzwerk herstellen. Es handelt sich um Ubiquiti-Geräte, und die einzigen offenen Ports sind 80 und 22.

Wenn ssh nicht funktioniert, verwende ich das Paket RSelenium für R und extrahiere Informationen aus Port 80. Aber zuerst werde ich es mit ssh pory 22 versuchen, da es viel effizienter ist als das Öffnen eines emulierten Browsers.

Das große Problem bei all diesen Ubiquiti-Geräten ist, dass sie ein Passwort zum Anmelden haben. Deshalb wird die erforderliche Nr. 2 benötigt. Wenn ich einen mir bekannten Server eingeben muss, verbringe ich Zeit damit, das rsa-Schlüsselpaar einzurichten, damit ich nicht jedes Mal ein Kennwort eingeben muss, wenn ich eine Verbindung zu einem bestimmten Server herstelle, aber es ist unmöglich (oder zumindest für mich unmöglich). um alle +3000 Ubiquiti-Geräte mit diesen Schlüsselpaaren zu konfigurieren.

Aus diesem Grund verwende ich beispielsweise kein snmp, da dieses Gerät möglicherweise aktiviert ist oder nicht oder die snmp-Konfiguration falsch ist. Ich meine, ich muss etwas verwenden, das standardmäßig aktiviert und in gewisser Weise geordnet ist. Und nur Port 80 und Port 22 sind aktiviert und ich kenne alle Geräte des Benutzers und des Passworts.

Und sshpass ist ein Dienstprogramm unter UNIX / Linux wie dieser Link erklärt, das für Server funktioniert, aber nicht für Ubiquiti-Geräte, solange ich es getestet habe. Also kann ich es nicht benutzen.

Der Befehl, aus dem ich die Ausgabe extrahieren muss, ist mca-status. Wenn Sie dies einfach in die Konsole eingeben, werden einige Statistiken gedruckt, die ich von den Ubiquiti-Geräten erhalten möchte.

Korrigieren Sie mich bitte, wenn ich in etwas, das ich gepostet habe, falsch liege. Vielen Dank.

3
Geiser 5 Jän. 2016 im 15:44

2 Antworten

Beste Antwort

Schließlich habe ich es mit dem rPython -Paket und dem paramiko -Modul der Python gelöst, da es keine Möglichkeit gab, dies nur über R zu tun.

library(rPython)
python.exec(python.code = c("import paramiko", 
                            "ssh = paramiko.SSHClient()",
                            "ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())",
                            sprintf('ssh.connect("%s", username="USER", password="PASSWORD") ', IP),
                            'stdin, stdout, stderr = ssh.exec_command("mca-status")',
                            'stats = stdout.readlines()'))
1
Sergio Fernández 25 Jän. 2016 im 07:57

Ich denke du hast das falsch gemacht. Ich habe auch keine Ahnung, was Sie in Punkt 2 sagen wollen, und ich habe keine Ahnung, was Punkt 3 sagen soll.

Jetzt: ssh ist ein Authentifizierungsmechanismus , mit dem Sie (vertrauenswürdig) auf einen anderen Computer zugreifen und einen Befehl ausführen können. Dies kann so einfach sein wie

edd@max:~$ ssh bud Rscript -e '2+2'
[1] 4
edd@max:~$ 

Dabei rufe ich R (oder besser Rscript) auf dem Computer 'bud' (meinem Desktop) aus einer Sitzung auf dem Computer 'max' (meinem Server) auf. Dieser Befehl kann alles sein, einschließlich etwas, das in temporäre oder permanente Dateien schreibt. Sie können diese Dateien dann über scp abrufen.

Die Authentifizierung erfolgt unabhängig voneinander. Unter Unix verwenden wir häufig ssh-agent, die im Hintergrund ausgeführt werden und sich bei der Anmeldung gegen Sie authentifizieren.

1
Dirk Eddelbuettel 5 Jän. 2016 im 13:22