Sichere Kopie über zwei IP-Adressen in demselben Netzwerk auf den lokalen Computer

492
JWorkin

Ich versuche, ein bash-Skript für ssh zuerst in IP1 (fragt nach einem Kennwort) von meinem localhost-Rechner und dann von ssh in IP2 zu schreiben. Einmal in IP2 möchte ich auf meinem lokalen Rechner scp.

IP1=192.168.10.10 IP2=192.168.10.9  ssh root@$IP1 ssh root@$IP2  cd /var/log  scp message* localuser@$localIP:/home/localuser/Desktop/MessageFolder/ 

Das obige ist, was ich derzeit manuell über die Befehlszeile in Linux tun muss. Ich kopiere im Wesentlichen von 192.168.10.9 auf meinen lokalen Computer

Ich habe keinen direkten Zugang zu IP2. Betrachten Sie es als Hintertür. IP2 hat ein Passwort, IP1 nicht.

Gibt es eine Möglichkeit, dies zu tun? Ich habe mehr Code geschrieben, wenn dies nicht hilfreich ist.

Kann jemand überprüfen, ob ich etwas Ähnliches für diese Lösung tun kann: Scp über einen Proxy mit einem Befehl von der lokalen Maschine?

Ich habe auch von Portweiterleitung gehört ... Wie würde das mit diesem Beispiel funktionieren?

Ich bin sehr neu im Bash-Scripting und würde mich über etwas Geduld freuen.

0
Zumindest würde ich nicht empfehlen, sich mit der ssh config des Root-Benutzers zu beschäftigen, oder Sie könnten sich von der Maschine ausschließen. Wenn Sie den ssh config-Pfad ausprobieren, verwenden Sie auf jeden Fall einen anderen Benutzer. BeowulfNode42 vor 6 Jahren 0

3 Antworten auf die Frage

0
Paul

Sie können kein Skript auf einem Rechner starten, dann ssh auf einen anderen Rechner und das Skript dort fortsetzen.

Sie können jedoch eine Folge von Befehlen auf einem Remote-Computer wie folgt ausführen:

ssh -t root@IP1 'ssh root@IP2 scp /var/log/message* <user>@<IP>:/home/localuser/Desktop/MessageFolder/; ls /var/log/message*' 

Dies sagt sshin IP1 und übergibt den Rest der Zeile als Befehl zum Ausführen nach dem Anmelden.

In Anführungszeichen steht der auszuführende Befehl, dh die ssh in die zweite IP, zusammen mit dem Befehl, der ausgeführt werden soll, sobald er sich dort angemeldet hat.

Das macht Sinn. Ich denke in Ihrem ersten Satz, obwohl Sie falsch geschrieben haben, worauf ich mich beziehe, aber Sie verstehen das Konzept. Es hört sich an, als ob Sie sagten, mein Rechner sei auf IP1 und es sei nicht so. Was wäre, wenn ich mehrere Exemplare haben musste? Dh SCP-Nachricht * und log *? JWorkin vor 6 Jahren 0
Ich möchte diese Option wirklich gerne verwenden ... Kann ich nach dem localuser @ $ localIP: / home / localuser / Desktop / MessageFolder / mehrere Scp- und RM-Befehle mehrere Befehle hinzufügen? JWorkin vor 6 Jahren 0
@JWorkin Sicher, einfach mit Semikolons trennen Paul vor 6 Jahren 0
Ich erhalte die folgende Fehlermeldung: "Pseudo-Terminal wird nicht zugewiesen, da stdin kein Terminal ist" Soll ich ssh -tt verwenden? JWorkin vor 6 Jahren 0
@JWorkin In meinem Test reicht ein einzelnes "-t" (Antwort aktualisiert). Hast du es probiert? Paul vor 6 Jahren 0
Ich tat. scp / var / log / message * möchte ich erst ausführen, wenn ich auf exit drücke ... daher die IP2 beenden, von der ich die Daten haben möchte. Nachdem ich mich bei IP2 angemeldet habe, tut es buchstäblich nichts, bis ich auf exit drücke. Ich habe auch erkannt, dass ich buildroot auf IP1 und IP2 betreibe. JWorkin vor 6 Jahren 0
Ein kleines Update ... ssh -t root @ IP1 'ssh root @ IP2' funktioniert ... aber es wird kein zusätzlicher Befehl ausgeführt. Ich war in der Lage, ein Skript zu schreiben, um die Kopie auf dem lokalen Benutzercomputer nur einmal mit IP-Befehl unter Verwendung des Befehls sh auszuführen. Wenn ich ssh -t root @ IP1 ausführen könnte, ssh root @ IP2 cd / var / log / sh myscript.sh 'wäre das ideal! JWorkin vor 6 Jahren 0
0
BeowulfNode42

Lass mich das mal klarstellen:

  • localIP möchte die Dateien in / home / localuser / Desktop / MessageFolder /
  • die gewünschten Dateien befinden sich auf IP2 unter / var / log / message *
  • Die einzige Möglichkeit, auf IP2 zuzugreifen, ist von IP1

Sie müssen sich mit ssh / scp mit Schlüsseln anstelle von Passwörtern befassen, wie in https://wiki.archlinux.org/index.php/SSH_keys beschrieben . Ich würde auch empfehlen, den root-Benutzer für diese grundlegende Operation nicht zu verwenden.

Unter der Annahme, dass diese Annahmen korrekt sind, können Sie die Tunneling-Fähigkeit von SSH verwenden, so dass der localIP-Computer ssh / scp in 127.0.0.1:SomeUnusedPort verwenden kann, um zu IP2 zu gelangen. Der schwierigste Teil wird sein, zu wissen, wann der localIP-Rechner vom IP1-Rechner getrennt wird.

Dies ist ein kurzer Codeblock für das, was ich denke. Seien Sie sich bewusst, ich habe das überhaupt nicht getestet.

 IP1=192.168.10.10 IP2=192.168.10.9 SomeUnusedPortOnLocalIP=2209  ssh -L $SomeUnusedPortOnLocalIP $IP2:22 root@$IP1 "while [ ! -f /tmp/disconLocalIP.now ]; do sleep 2; done; rm /tmp/disconLocalIP.now " & # connects to IP1 establishing an ssh tunnel between localIP and IP2 # the loop testing for the existence of a file to let it know when to disconnect # the & symbol lets the command run in the background and the script to continue with it still running  # wait for the connection to actually establish fully before proceeding. sleep 10   # connect to port tunnel on localIP to get files from IP2 scp -P $SomeUnusedPortOnLocalIP root@$127.0.0.1:/var/log/message* /home/localuser/Desktop/MessageFolder/ scp -P $SomeUnusedPortOnLocalIP root@$127.0.0.1:/var/log/log* /home/localuser/Desktop/OtherLogs/  # put file on IP1 to tell loop to end and exit previous ssh session ssh root@$IP1 "touch /tmp/disconLocalIP.now"  
Was wäre, wenn ich mehrere Exemplare haben musste? Dh SCP-Nachricht * und SCP-Protokoll *? JWorkin vor 6 Jahren 0
Sie können einfach mehrere SCP-Zeilen nacheinander vor dem letzten SSH-Befehl einfügen, der die Verbindung mit IP1 zum Schließen auffordert. BeowulfNode42 vor 6 Jahren 0
0
Daniel B

SSH unterstützt dies. Ich werde Antworten zitiere hier :

ProxyCommand ist gemäß der ssh-Manpage die richtige Methode

Die Syntax lautet:

ProxyCommand ssh -W %h:%p user@jumphost 2> /dev/null 

Oder bei einem ausreichend neuen System:

Ab OpenSSH 7.3 (Ende 2016) ist die Einstellung ProxyJump der einfachste Weg . In Ihrem ~/.ssh/config:

Host B ProxyJump A 

Oder auf der Befehlszeile, -J B.

Die letztere Lösung unterstützt sogar beliebig tiefe Ketten, siehe die verknüpfte Anleitung.

Mit SCP können Sie nicht verwenden -J, also sieht es so aus:

scp -o "ProxyJump root@$IP1" root@$IP2:/var/log/message* /home/localuser/Desktop/MessageFolder/