Weg zu Intermediate Linux: Network Edition

Eine Fortsetzung von Linux Beginners-Qiita. Ab dem 05. April 2020 hat die weltweite Infektion mit [COVID-19](schweres akutes respiratorisches Syndrom Coronavirus 2) die Städte blockiert und verlangt, nicht auszugehen. Telearbeit wird für die Arbeit so weit wie möglich empfohlen, daher werde ich die erforderlichen Elemente für den Fernzugriff auf die Netzwerkumgebung im Labor von außerhalb des Labors zusammenfassen und dabei die Umgebung berücksichtigen, die ein wissenschaftliches Labor einer Universität zu sein scheint.

Zugriff auf das Intranet über das Internet

Vom Intranet (z. B. dem Netzwerk im Labor) bis zum Internet (z. B. dem Netzwerk außerhalb des Labors) gibt es normalerweise nur wenige Einschränkungen, und Sie können frei gehen. Derzeit ist er über den Gateway-Server unterwegs, und die Struktur des Intranets kann nicht direkt aus dem Internet angezeigt werden. Es sieht aus wie der Zugriff von der globalen IP-Adresse des Gateways. Im Gegenteil, hier erklären wir, welche Art von Befehl und was getan werden kann, wenn das Intranet von einer bestimmten Adresse im Internet aus aufgerufen wird. Hier berühren wir grundsätzlich den Zugriff mit ssh.

Greifen Sie mit ssh auf den Intranet Bastion-Server zu

Da dem Gateway die globale IP-Adresse / der Hostname zugewiesen wird, können Sie mit ssh auf diese IP-Adresse / den Hostnamen zugreifen. Die IP-Adresse / der Hostname ist für den Zugriff erforderlich. Wenden Sie sich daher an die Person, die das Intranet verwaltet. Wenn diese IP-Adresse www.xxx.yyy.zzz lautet und der Hostname host.gate lautet, ist user der Benutzername

ssh [email protected]
ssh [email protected]

Sie können mit darauf zugreifen (siehe unten, wenn Sie einen Schlüssel benötigen). Vielleicht können Sie nicht so darauf zugreifen, wie es ist. Der Grund dafür ist, dass die Portnummer normalerweise von 22 abweicht und nicht angegeben wird. Bitte warten Sie etwas länger auf die eigentliche Anmeldung, da dies zur Vereinfachung der Erklärung erforderlich ist. </ font> Wenn die Portnummer standardmäßig 22 ist und Sie hier nicht darauf zugreifen können, wurden Sie wahrscheinlich überhaupt nicht als Benutzer hinzugefügt oder das von Ihnen festgelegte Kennwort war falsch.

Hier werde ich etwas mehr darüber erklären, was tatsächlich passiert. Normalerweise wird das Gateway häufig als dedizierter Maschinenrouter verwendet, und dieser dedizierte Maschinenrouter verfügt normalerweise nicht über Benutzerinformationen. Wo bist du dann eingeloggt? Die Antwort ist ein Bastionsserver. Der Stufenserver ist ein Server, der den gesamten Zugriff auf den Router beim Aufrufen des Intranets aus dem Internet verwaltet. Wenn Sie von außen in das Intranet eintreten, müssen Sie sich zuerst bei diesem Server anmelden.

Verschieben Sie die Portnummer -p

Normalerweise weicht die Portnummer des SSH-Protokolls des Gateways oder des Step-Servers von der Standardnummer 22 ab. Der Grund dafür ist, dass diese Server im Internet ständig versuchen, sich von nicht angegebenen Computern aus anzumelden, und Nummer 22 der Standardport für ssh ist, was es zu einem vielversprechenden Angriffsziel macht. Daher weicht die Portnummer von 22 ab, wenn mit ssh auf einen Computer zugegriffen wird, der normalerweise mit dem Internet verbunden ist.

Angenommen, die Portnummer lautet 31415 (nur die ersten fünf Ziffern des Umfangs). Zu diesem Zeitpunkt sollte der Zugriff mit ssh wie folgt erfolgen:

ssh -p 31415 [email protected]
ssh -p 31415 [email protected]

Angabe des Schlüssels -i

Standardmäßig können Sie sich mit ssh mit Ihrem Benutzernamen und dem entsprechenden Passwort anmelden. Wenn die Portnummer 22 ist, können Sie sich mit einem allgemeinen Benutzernamen und einem leicht zu erratenden Kennwort leicht böswillig anmelden. Sie können die Schlüsselauthentifizierungsmethode von ssh verwenden, um dieses Eindringen noch schwieriger zu machen. Durch Platzieren des öffentlichen Schlüssels am angegebenen Speicherort des Anmeldeziels und Platzieren des privaten Schlüssels auf dem Computer der Anmeldequelle können Sie sich nur anmelden, wenn dieses Schlüsselpaar übereinstimmt. Hier haben wir unter Berücksichtigung des RSA-Schlüssels beschrieben, wie Sie mit dem Schlüssel auf den Server zugreifen. Weitere Informationen finden Sie unter "SSH-Schlüsselauthentifizierung". Der Anmeldebefehl kann mit der Option -i wie folgt angegeben werden, wenn sich der Schlüssel in ~ / .ssh / id_rsa befindet:

ssh -p 31415 -i ~/.ssh/id_rsa [email protected]
ssh -p 31415 -i ~/.ssh/id_rsa [email protected]

Sie werden nach der Passphrase gefragt, die Sie beim Generieren des Schlüssels angegeben haben. Geben Sie sie daher ein.

Ich möchte das X Window System -X, -Y verwenden

Durch den Fernzugriff mit ssh können die meisten Apps ein Fenster anzeigen. Sie können die meisten GUI-Bildschirme wie Gnuplot, Firefox von etwas wie xterm, xpdf, xdvi überspringen, das wie ein X-Fenstersystem aussieht. (Beachten Sie jedoch, dass es einige Apps gibt, die am Ende einen seltsamen Dämon hinterlassen.) Wenn Sie eine App auf einem Server mit Daten starten möchten, die Sie analysieren möchten, oder wenn sich die App aufgrund des Effekts nur auf einem bestimmten Server befindet, ist die Installation der App äußerst mühsam ( Es ist effektiv, wenn es aufgrund der Abhängigkeit von Betriebssystem, Bibliothek usw. nur auf einem bestimmten Computer installiert ist. Wenn Sie diese Funktionen verwenden möchten, fügen Sie die Option "-X" oder "-Y" hinzu. Ich kenne den Unterschied nicht, aber wenn Sie einen Mac verwenden, wird der erstere in relativ kurzer Zeit getrennt und der letztere ist stabiler. Ein Beispielbefehl lautet wie folgt

ssh -X [email protected]
ssh -X [email protected]
ssh -Y [email protected]
ssh -Y [email protected]

Wenn die Kommunikationsgeschwindigkeit eines Remote-Servers langsam ist (z. B. eines Mobilfunknetzes), kann die Bandbreite durch Komprimieren des Kommunikationsinhalts gespart werden. Wenn man "man ssh" betrachtet, ist es ziemlich langsam, wenn man ein schnelles Netzwerk verwendet.

ssh -XC [email protected]
ssh -YC [email protected]

Nachdem ich mich beim Plattformserver angemeldet habe, möchte ich automatisch auf einen anderen Computer im Intranet -t wechseln

Im Intranet ist der Plattformserver normalerweise darauf vorbereitet und hat im Allgemeinen keine andere Funktion. Normalerweise besteht nach der Anmeldung beim Plattformserver eine große Nachfrage nach der Anmeldung bei einem Clustercomputer, einem Dateiserver oder einem persönlich verwalteten Computer, um die Daten anzuzeigen. Wenn Sie diese Ziele erreichen möchten, können Sie sich beim Plattformserver und dann beim nächsten Server in Form von "ssh -XC user @ 192.168.xxx.yyy" anmelden. Aber ich denke, es muss dumm und automatisiert sein, dies jedes Mal zu tun. Jemand übt fast immer „Ist das nicht möglich?“, An die ein Amateur denken kann, und Informationen finden Sie im Internet. In diesem Fall kann dies mit der von ssh bereitgestellten Standardoption -t erreicht werden. Geben Sie die Option -t an und schreiben Sie den Befehl auf das Terminal, das Sie ausführen möchten, auf das Terminal, das rechts neben dem Hostnamen angemeldet ist.

ssh -p 31415 -t [email protected] ssh [email protected]
ssh -p 31415 -t [email protected] ssh [email protected]

Selbst wenn kein -t vorhanden ist, wird der rechts neben dem Hostnamen geschriebene Befehl ausgeführt. In diesem Fall ist jedoch die Option -t erforderlich. Wenn dieser Befehl ausgeführt wird, sollten Sie nach dem nachfolgenden Kennwort für 192.268.xxx.yyy / linux.intra gefragt werden.

Der Befehl ist keine Variable, die die Option "-t" separat erhalten hat, daher kann er getrennt werden. Ich persönlich bevorzuge es jedoch, ihn wie folgt zusammen zu schreiben:

ssh -p 31415 [email protected] -t ssh [email protected]
ssh -p 31415 [email protected] -t ssh [email protected]

Wenn Sie X vom letzten Anmeldeziel überspringen möchten, können Sie auch "ssh -p 31415 -X [email protected] -t ssh -X user @ 192.168.xxx.yyy" verwenden. Das mit 192.168.xxx.yyy gestartete Fenster fliegt zu Ihnen.

Anwendung von Befehlen mit -t

Wie Sie sehen können, muss der Befehl rechts neben dem Hostnamen nicht ssh sein. Wenn Sie einen Befehl haben, den Sie sofort auf dem von Ihnen angemeldeten Computer ausführen möchten, nicht nur auf dem Plattformserver, sollten Sie ihn hier schreiben. Zum Beispiel, wenn Sie den Jobausführungsstatus des Supercomputers und das verbleibende Budget überprüfen möchten

ssh -t [email protected] qstat
ssh -t [email protected] point

Wenn Sie schreiben usw., werden Sie sofort nach Anzeige des Ausführungsstatus und der Anzahl der verbleibenden Punkte abgemeldet. Es gibt auch viele Fälle, in denen Sie auf die Option -t verzichten können. Beachten Sie jedoch, dass einige Optionen, die dem Befehl beiliegen (möglicherweise abhängig davon, welche Konfigurationsdatei geladen wird), zu diesem Zeitpunkt möglicherweise ignoriert werden.

Ich möchte den Zugriff auf einen bestimmten Port durch den Zugriff auf meinen Port "-L" ersetzen

Es gibt eine Funktion namens Portweiterleitung, die den Portzugriff auf einen bestimmten Computer im Laborintranet durch den Port des Computers ersetzt, der die Zugriffsquelle darstellt. Beispielsweise ist der Fernzugriff auf das unten beschriebene Jupyter-Notebook und der Zugriff auf ssh bequem.

Jupyter notebook -L 8888:192.168.xxx.yyy:8888 Standardmäßig startet Jupyter Notebook einen Browser auf dem gestarteten Gerät. Wenn Sie den Remotezugriff festlegen (z. B. Jupyter-Notebook auf einem Remote-Server starten und in einer lokalen Umgebung verwenden - Qiita), befindet es sich im Intranet. Von einem Computer ohne Zugriffsbeschränkungen aus können Sie darauf zugreifen, indem Sie im Browser "192.168.xxx.yyy: 8888" eingeben. Die Bedeutung dieser Zeichenfolge ist IP-Adresse: Portnummer, was bedeutet, dass die Portnummer 8888 ist. Wenn Sie das Jupyter-Notebook mehrmals starten, erhöht sich die Portnummer normalerweise um eins, 8888, 8889, 8890. Da der Plattformserver im Intranet vorhanden ist, kann von hier aus eine Portweiterleitung durchgeführt werden, um den Port des bestimmten Computers im Intranet zum spezifischen Port der Anmeldequelle zu springen. Wenn Sie beispielsweise 8888 von 192.168.xxx.yyy im Intranet auf 8888 oder 18888 der Anmeldequelle überspringen möchten, lautet die Schreibmethode wie folgt:

# -L [Anmeldenummer Portnummer]:[IP des Intranetcomputers]:[Intranet-Computeranschluss]
ssh -p 31415 [email protected] -L 8888:192.168.xxx.yyy:8888 -t ssh [email protected]
ssh -p 31415 [email protected] -L 18888:192.168.xxx.yyy:8888 -t ssh [email protected]

Der Befehl "ssh user @ 192.168.xxx.yyy" rechts von "-t" ist für die Portweiterleitung selbst nicht erforderlich, muss jedoch normalerweise einmal beim Start des Jupyter-Notebooks beim Zielcomputer angemeldet werden. Es ist vollbracht. Wenn Sie bereits über ein Jupyter-Notizbuch verfügen, auf das unter 8888 zugegriffen werden kann, benötigen Sie diesen Befehl nicht. Grundsätzlich kann für die Portnummer der Login-Quelle eine beliebige Nummer vorbereitet werden. 0-1023 ist jedoch für vorhandene häufig verwendete Dienste reserviert, daher ist es besser, es nicht anzugeben.

SSH / SFTP-Zugriff -L 10022: 192.168.xxx.yyy: 22

Wie oben erwähnt, kann der Status des Intranets nicht direkt aus dem Internet angezeigt werden. Indem Sie einen Plattformserver im Intranet vorbereiten und sich über das Gateway bei diesem anmelden, können Sie das Intranet aufrufen. Sobald Sie sich beim Plattformserver angemeldet haben, erleichtert Ihnen die Portweiterleitung den Zugriff auf Ihr Intranet. Die Methode wird hier am Beispiel der ssh / sftp-Verbindung erläutert. Wenn Sie den 22. Port des Computers (192.168.xxx.yyy) im Intranet der Anmeldequelle 10022 auf dem Stufenserver zuordnen, geben Sie in der nachfolgenden Verbindung Ihre eigene 10022 als Anmeldeziel von ssh an. Dann wird es zum Verhalten beim Zugriff auf Nr. 22 des Intranets. Der erste Befehl dafür ist

ssh -p 31415 [email protected] -L 10022:192.168.xxx.yyy:22 

Anschließend können Sie mit ssh / sftp mit dem folgenden Befehl auf 192.168.xxx.yyy im Intranet zugreifen:

ssh -p 10022 user@localhost
sftp -P 10022 user@localhost

Beachten Sie, dass die SFTP-Portnummer als "-P" angegeben ist und P ein Großbuchstabe ist. Abhängig von der Version von sftp kann es auch auf "-Port = 10022" gesetzt werden. Überprüfen Sie mit man sftp. Um ehrlich zu sein, ist SFTP für die Einstellungen hier vorteilhafter als SSH. Wenn Sie beim Hochladen einer Datei auf den gewünschten Computer, wenn sich der Computer im Intranet befindet, wenn Sie dies einfach tun möchten, "Legen Sie die Datei zuerst mit sftp auf dem Plattformserver ab" → "Melden Sie sich mit ssh beim Plattformserver an" → "sftp auf dem Plattformserver". Es wird zu einem äußerst langwierigen Vorgang, "die Datei auszuführen und auf den gewünschten Computer zu verschieben". Durch die Verwendung der Portweiterleitung kann dieser Aufwand sofort reduziert werden. Es gibt eine Kritik, dass "da Sie sich mit ssh beim Plattformserver anmelden, der Aufwand möglicherweise reduziert wird". Da sftp eine interaktive App ist, können Sie sie hochladen / herunterladen, während Sie sowohl Ihre Umgebung als auch die Umgebung betrachten, in der Sie angemeldet sind. Wenn Sie andererseits die Prozedur zum einmaligen Ablegen der Datei auf dem Plattformserver durchlaufen, z. B. wenn die hochgeladene / heruntergeladene Datei falsch ist, müssen Sie alle Prozeduren erneut wiederholen. Wenn Sie die Portweiterleitung verwenden und eine direkte Verbindung mit SFTP herstellen, kann ein solches Problem nicht auftreten.

Ich möchte Webseiten durchsuchen, auf die nur über das Intranet mit meinem Browser -D zugegriffen werden kann

Auf verschiedenen Ebenen gibt es Webseiten, auf die über das Intranet zugegriffen werden kann, obwohl der Zugriff eingeschränkt ist oder aus Gründen der Authentifizierung nicht über das allgemeine Internet zugegriffen werden kann. Zugriff über die Portweiterleitung. Die oben verwendete Portweiterleitung wird als lokale Weiterleitung bezeichnet, und hier verwenden wir die dynamische Weiterleitung. Die Option ist "-D", um die Portnummer anzugeben:

ssh -p 31415 -D 10080 [email protected]

Wenn Sie es so schreiben, wird es zu einem SOCKS-Proxyserver mit der Portnummer 10080. Durch Angabe von localhost für den SOCKS-Host und 10080 für den Port im Element der Proxy-Server-Einstellung des Browsers verhält es sich so, als würde der Browser vom Plattformserver aus darauf zugreifen.

Fassen Sie den Stepping Server zusammen und greifen Sie über die Konfigurationsdatei auf die Einstellungen zu

Bisher haben wir das Verfahren zum Aktivieren verschiedener Funktionen im Intranet beschrieben, indem wir die ssh-Optionen vollständig genutzt haben. Es ist jedoch mühsam, diese Befehle jedes Mal einzugeben. Es wäre cool, wenn es in einer Einstellungsdatei zusammengestellt werden könnte. Die Konfigurationsdatei lautet ~ / .ssh / config. Ich werde die bisher beschriebenen Dateien erklären und die Funktionen widerspiegeln (die ".ssh / config-Datei" meiner Gedanken).

Die grundlegende Grammatik ist

Host [Lieblingsname]
    Hostname [IP/Hostname}
    IdentityFile [Schlüsselpfad]
    Port [Port-Nummer]
    LocalForward [Login-Quellport] [IP des Intranetcomputers]:[Intranet-Computeranschluss]
    DynamicForward [Portnummer für die dynamische Weiterleitung]
    ForwardX11 [Wenn ja, verwenden Sie das X Window System] 
    Compression [Wenn ja, wird der Kommunikationsinhalt komprimiert]
    ProxyCommand [Befehle, die nach dem Anmelden ausgeführt werden]

Ich fühle mich so. Die Zusammenfassung lautet wie folgt:

~.ssh/config


#
Host Bastion
    HostName 192.168.xxx.zzz
    IdentityFile /home/user/.ssh/id_rsa
Host linux
    HostName 192.168.xxx.yyy
Host Bastionout
    HostName www.xxx.yyy.zzz
    IdentityFile /home/user/.ssh/id_rsa
    Port 31415
Host linuxout
    HostName 192.168.xxx.yyy
    ProxyCommand ssh -XCW %h:%p Bastionout
Host linuxtunnelout
    HostName 192.168.xxx.yyy
    ProxyCommand ssh -XCW %h:%p Bastionout
    LocalForward 10022 localhost:22
    LocalForward 8888 localhost:8888
    LocalForward 8889 localhost:8889
    LocalForward 8890 localhost:8890
    LocalForward 8891 localhost:8891
    DynamicForward 10080
    GatewayPorts yes
Host linuxsecondout
    HostName localhost
    Port 10022
#
HOST *out
    ServerAliveInterval 60
    TCPKeepAlive yes
    Compression yes
HOST *
    User user
    ForwardX11 yes
    ForwardX11Trusted yes

Die letzten "SeverAliveInterval" und "TCPKeepAlive" sind Optionen, um das Phänomen der Trennung zu verringern, wenn eine SSH-Verbindung über das Internet hergestellt wird. Hier nicht erklärt. Ich habe erwartet, dass ungefähr vier Jupyter-Notebooks gleichzeitig gestartet werden, also habe ich vier Seriennummern von 8888 auf 8891 weitergeleitet. Da das Jupyter-Notebook anscheinend nicht gleichzeitig an der Anmeldequelle verwendet wird, entspricht die Portnummer der im Intranet. Die Portweiterleitung gibt eine Warnung aus, wenn sie zweimal gestartet wird, was sehr unangenehm ist. Aus diesem Grund haben wir einfaches Linuxout, Linuxtunnelout für die Portweiterleitung und Linuxsecondout für den kontinuierlichen Zugriff im Portweiterleitungsstatus vorbereitet. Wenn Sie während der Portweiterleitung "Gateway Ports yes" eingeben, ist der Zugriff auf den weitergeleiteten Port von anderen Computern als dem Portweiterleitungscomputer zulässig. Platzhalter (*) können im Namen des Host-Teils verwendet werden. Hier wollte ich das X-Fenstersystem für alle Verbindungen verwenden, deshalb habe ich es im Abschnitt "Host *" aufgelistet. Hier wird jeder Zugriff aus dem Internet als \ * out bezeichnet, und alle haben Einstellungen zum Nicht-Trennen von ssh und Einstellungen für die Kommunikationskomprimierung. Schauen Sie sich das Handbuch mit man ssh_config an

Since the first obtained value for each parameter is used, more host-spe‐ cific declarations should be given near the beginning of the file, and general defaults at the end.

Daher ist es erforderlich, Variablen, die Sie aufgrund von Umweltproblemen ändern möchten, oben in die Datei und allgemeine Variablen so weit wie möglich unten zu schreiben.

Häufig verwendete Befehle für den Fernzugriff

Befehls-Download-Datei auf dem Remote-Computer: wget

Manchmal haben Sie eine Datei, die Sie herunterladen möchten, und möchten sie auf einem remote verbundenen Computer ablegen. Zu diesem Zeitpunkt scheint es zu dumm, es auf Ihren Computer herunterzuladen und dann mit SFTP zu übertragen. Wenn Sie die URL kennen, die die herunterzuladende Datei angibt

wget [URL]

Der Zweck kann mit erreicht werden.

FAQ Wo wir uns versammeln

Recommended Posts

Weg zu Intermediate Linux: Network Edition
Ein Weg zum mittleren Python
[Road to Intermediate] Grundlegendes zu Python-Eigenschaften
[Road to Intermediate Python] Verwenden Sie ternäre Operatoren
Tools zur Überprüfung der Linux-Netzwerkkommunikation
[Road to Intermediate Python] Verwenden Sie Lambda-Ausdrücke
[Road to Intermediate Python] Zusammenfassung der Artikelverknüpfungen
Netzwerk-Linux-Befehle
[Linux] Einführung in Linux
Linux-Netzwerk-Namespace
[Road to Intermediate] Python scheint alles Objekte zu sein
[Road to Intermediate] Was sind Pythons * Argumente, ** Kwargs?
Führen Sie serverspec in Linux ein
[Road to Intermediate Python] Definieren Sie die Funktion __getattr__ in der Klasse
Linux-Befehle zum Erinnern
Der Weg nach Pythonista
[Road to Intermediate Python] Definieren Sie in Ihrer eigenen Klasse
Der Weg nach Djangoist
[Road to Intermediate] Verwenden Sie die in Python integrierten Funktionsvariablen
Weg zur LPIC-1-Akquisition
Netzwerk-Memo (hauptsächlich Linux)
[Road to Intermediate Python] Installieren Sie Pakete in großen Mengen mit pip
[Road to Intermediate Python] Verwenden Sie die if-Anweisung in der Listeneinschlussnotation
[Road to Intermediate Python] Aktiviert Vergleichsoperationen mit Originalklassen
[Windows] RDP zu Windows über Linux
Eine super Einführung in Linux
Der Weg zum Herunterladen von Matplotlib
[Linux] Willkommen im Notfallmodus!
Ich habe versucht, Linux wieder einzuführen
Einfach zu bedienendes E-Cell 4 Intermediate
[Road to Intermediate Python] Rufen Sie eine Klasseninstanz wie eine Funktion mit __call__ auf
Holen Sie sich die der Netzwerkschnittstelle zugewiesene IPv4-Adresse in Code (Linux)