Einrichten der Umgebung in der CLI. WSL / Windows Terminal

Es gibt Leute, die den größten Teil ihrer Arbeitszeit in der Konsole verbringen, es gibt Leute, die das Terminal bei Bedarf benutzen und etwas gemäß den Anweisungen ausführen. Aber ich denke, dass jeder IT-Spezialist, egal ob Entwickler, Systemadministrator, Netzwerktechniker oder auch Senior-Entwickler, die Befehlszeilenschnittstelle verwendet. Nicht jeder denkt daran, die Arbeitsumgebung in der CLI zu verbessern und die Produktivität im Terminal zu steigern. Ich möchte meine Erfahrungen mit der Einrichtung der Umgebung für die Arbeit mit Linux unter Windows teilen.



In diesem Artikel erfahren Sie, welche Tools und welches Terminal derzeit zum Ausführen von Linux-Anwendungen unter Windows 10 verwendet werden. Wir werden uns mit WSL 2 und Windows Terminal befassen, die bei Benutzern, die Linux zum Arbeiten benötigen, immer beliebter werden. Da sich die meisten meiner Anwendungsfälle auf eine Remote-Verbindung über SSH beziehen, sind die meisten Informationen für Fälle von Remote-Verbindungen mit allen damit verbundenen Funktionen relevant (Weiterleiten von SSH-Schlüsseln über den SSH-Agenten, Weiterleiten von X-Server, Verwalten von Verbindungen usw.) )

Achtung! Unter dem Schnitt viele Bilder und geschrumpft, aber manchmal voluminös, gif, empfiehlt es sich, den Artikel zu öffnen, wenn Sie einen entsprechenden Zugang zum Internet haben. Kommen Sie unter die Katze, wenn Sie Linux-Dienstprogramme unter Windows ausführen, Ihre Arbeit in der CLI-Umgebung optimieren oder nur technische Texte und Farbterminals mögen. Ich habe versucht, den Text mit Screencasts und Screenshots des Terminals aufzuhellen, damit es nicht langweilig wird.

Einleitung


Sowohl auf meinem Heim- als auch auf meinem Arbeits-Laptop ist Windows 10 mein einziges Betriebssystem, und in diesem Jahr habe ich endlich auf die Verwendung von WSL anstelle von VM / Dualboot / Cygwin / MinGW umgestellt. Jetzt ist mein Standardterminal die lokale WSL-Shell, auf der ich fast jede Aufgabe ausführen kann, wie unter nativem Linux. Darüber hinaus wird der Intel NUC-Miniserver im Heimnetzwerk ausgeführt, auf dem Proxmox mit LXC-Containern und KVM bereitgestellt wird, in dem sich Docker dreht. Ich gehe über SSH mit Schlüsseln aus dem Windows-Verzeichnis zu allen VMs. In der CLI findet viel Zeit für professionelle Aktivitäten mit demselben Server und Netzwerk statt. Es besteht daher immer der Wunsch, mit Werkzeugen für ein komfortableres Arbeiten im Terminal umzugehen, und unter Windows gab es immer Probleme damit. Aber jetzt ändert sich alles.



Dieser und die folgenden Artikel richten sich eher an Enthusiasten, die nach frischen Lösungen suchen und ihre Muschel pumpen möchten. Aber für Anfänger sollte etwas interessant sein, obwohl der Artikel sich als ziemlich tief in das Thema vertieft herausstellte und suggeriert, dass der Leser einige Grundkenntnisse in Linux hat. Alle Informationen werden auf der Grundlage persönlicher Erfahrungen mit der WSL, einem Terminal, sowie einer endlosen Suche nach Stack Overflow- und Github-Problemen gesammelt, um die Konfiguration ständig zu verbessern und praktische Tools für die Arbeit zu finden.

Windows-Subsystem für Linux (WSL) 2


Es gibt mehrere normale Artikel zu WSL im Internet und zu Habr ( einmal ein Artikel über die Installation / Konfiguration von WSL mit einem X-Server, zwei Anmerkungen zu WSL 2, drei Artikel über die Python-Entwicklung in VSCode mit WSL), die die Installation und Konfiguration des Systems beschreiben. Es sind jedoch nicht alle Installationsaktionen bereits relevant, und Einschränkungen mit Fallstricken werden immer geringer. Ich werde nicht im Detail auf die Installation eingehen. Die Anweisungen zur Installation der aktuellen (zweiten) Version von WSL finden Sie auf der Microsoft-Website . Außerdem finden Sie kurze Tutorials im Internet.



Jetzt befindet sich die WSL noch in der aktiven Entwicklung und vor kurzem ( Juni 2019 ) wurde eine neue Version von WSL 2 veröffentlicht, die derzeit nur für neue Versionen von Windows für Windows Insiders-Mitglieder verfügbar ist. Ich rate Ihnen, WSL nach Möglichkeit sofort auf Version 2 zu aktualisieren, da dies die Arbeit von Systemaufrufen, die Arbeit mit dem Netzwerk und dem FS verbessert und im Allgemeinen auf einer anderen Architektur aufbaut und nach einigen Berichten die Geschwindigkeit im Vergleich zur ersten Version um das 20-fache erhöht .

Sie können die Version von Windows 10 und OS Build unter Start -> Einstellungen -> System -> Info sehen. Um WSL 2 zu installieren, benötigen Sie Windows 1903 und mindestens Build-Version 18917 . Wenn Sie kein Mitglied des Windows Insider-Programms sind , werden die Updates höchstwahrscheinlich erst nach einer stabilen Version eintreffen. Wenn Sie also auf den neuesten Build aktualisieren möchten, können Sie den frühen Zugriff ( Schnell ) unter Start -> Einstellungen -> Update & Sicherheit -> Windows Insider-Programm aktivieren, weitere Updates aktualisieren und deaktivieren. Es ist zu bedenken, dass noch nicht in großen Mengen getestete Updates installiert werden, die die Stabilität beeinträchtigen können.

Es sollte beachtet werden, dass WSL vor der Erstellung von Version 18995 einen Fehler aufweist, wenn mit Dateien auf bereitgestellten Windows-Datenträgern gearbeitet wird, der als Eingabe- / Ausgabefehler ausgedrückt wird. Nur ein Neustart von WSL ( wsl --shutdown in PowerShell) hilft. Im Allgemeinen gibt es in WSL Version 1 (die standardmäßig festgelegt ist) und in Nicht-Vorschau-Distributionen von Windows noch viele behobene Fehler. Wenn Ihre Betriebssystemaktualisierungen durch Unternehmensrichtlinien geregelt werden, werden höchstwahrscheinlich die neuesten Aktualisierungen nicht ankommen, und Sie müssen dies berücksichtigen. Auf einem der Laptops habe ich 18956 gebaut und es gibt keine Updates, obwohl in den Insider-Programmeinstellungen die Option Schnell ausgewählt ist. Ein sauberes System wurde vor ein paar Monaten auf einem anderen Laptop installiert, und Updates kommen regelmäßig an und werden installiert.

Installieren Sie WSL 2


Für WSL muss Hyper-V aktiviert sein, da Linux-Distributionen auf einfachen VMs mit Hyper-V-Virtualisierung ausgeführt werden.



Als Nächstes gebe ich eine kurze Installationsanleitung für die CLI PowerShell-Distribution von WSL (als Beispiel Kali Linux ). Wenn Sie Ubuntu oder eine andere verfügbare Linux- Distribution bevorzugen, ersetzen Sie den Link und die Namen durch die entsprechenden.

Überprüfen Sie die Windows Build-Version:

Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" | Select CurrentBuild

Aktivieren Sie die Komponenten VirtualMachinePlatform und Microsoft-Windows-Subsystem-Linux:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform


Starten Sie neu
Installieren Sie als Nächstes entweder die Distribution aus dem Microsoft Store ( https://aka.ms/wslstore ) oder fahren Sie mit der Ausführung in PowerShell fort:

curl.exe -L -o kali.appx https://aka.ms/wsl-kali-linux-new
Add-AppxPackage .\kali.appx
rm .\kali.appx


Starten Sie die WSL-Konsole (die Distribution sollte im Startmenü erscheinen, suchen Sie nach dem Namen der Distribution), warten Sie auf die Aufforderung, einen neuen Benutzer zu installieren, und schließen Sie die Konsole.

Jetzt sollte die Distribution in der Liste angezeigt werden, wenn sie in PowerShell ausgeführt wird:

wsl -l -v

Falls erforderlich, konvertieren Sie die Distribution in das WSL-Format der Version 2:

wsl --set-version kali-linux 2
wsl --set-default-version 2


Machen Sie root zum Standardbenutzer (optional):

kali config --default-user root

Wenn Sie die Fehlermeldung "Ein Verbindungsversuch ist fehlgeschlagen, weil der verbundene Teilnehmer nach einiger Zeit nicht richtig geantwortet hat, oder eine hergestellte Verbindung ist fehlgeschlagen, weil der verbundene Host nicht geantwortet hat." Erhalten, haben Sie einen Build, in dem der nächste (bereits behoben) in neueren Releases) Fehler. Wie üblich gibt es eine Problemumgehung , oder benutze die Ubuntu-Distribution, ich hatte keine Probleme damit, auch nicht die neueste Version des Builds.

Bei Bedarf können Sie die virtuelle WSL-Festplatte gemäß den Anweisungen auf eine andere Partition (anders als C :) verschieben. Es ist besser, dies sofort zu tun, da nicht alles reibungslos verlaufen kann.

Haftungsausschluss zur Sicherheit . In der WSL und auf anderen Linux-Servern im Heimnetzwerk führe ich keine kritischen Systeme aus, und es gibt keine anderen Benutzer (außer mir) im Netzwerk, so dass ich fast überall mit SSH-Authentifizierung über Schlüssel zum Root gehe. Ich weiß, dass dies nicht die beste Vorgehensweise ist, aber ich spreche von einer persönlichen Entwicklungsumgebung und sehe keinen Sinn darin, einen Nicht-Root-Benutzer zu erstellen. In diesem Artikel werden Sicherheitsprobleme nicht berücksichtigt. Ich werde eines Tages darüber schreiben (wie die Interaktion von Diensten über TLS mit einer zentralen Zertifikatserneuerung in einem Heimnetzwerk organisiert wird; Informationen zur Synchronisierung ~ / .ssh / config zwischen Servern, Weiterleitung) Ports und Schlüssel usw.).

WSL-Konfiguration


Ab Build 17093 befindet sich die Haupt-WSL-Konfigurationsdatei auf dem Distributionssystem FS unter /etc/wsl.conf . Sie beschreibt die Einstellungen, die bei jedem Start der Distribution angewendet werden:

  • Automount - Automatische Bereitstellung von Windows-Laufwerken
  • Netzwerk - Erzeugen Sie resolv.conf-Dateien, Hosts
  • Interop - Windows-Prozesse starten und Windows $ PATH zu Linux $ PATH hinzufügen

Anfänglich geht die WSL ohne diese Konfiguration, sie muss manuell registriert werden:

[automount]
enabled = true
root = /mnt
options = "metadata,umask=22,fmask=11"
mountFsTab = true

[network]
generateHosts = true
generateResolvConf = true

[interop]
enabled = true
appendWindowsPath = true


Einige Einstellungen werden mit dem Standardwert und mit /etc/wsl.conf leer verwendet. Für den korrekten Betrieb mit den Dateien müssen Sie jedoch mindestens den Parameter options registrieren. Andernfalls sind die Windows-Dateien mit 777-Berechtigungen ausgestattet und können unter Linux nicht geändert werden.



Sie können die Distribution über PowerShell mit dem folgenden Befehl neu starten:

wsl -t kali-linux

Danach können Sie die Pakete aktualisieren und das Betriebssystem für sich selbst optimieren. Ich werde nicht auf die Shell-Einstellungen und die Umgebung unter Linux eingehen, ich werde dies für den nächsten Artikel belassen.

apt -y update && apt -y upgrade

WSL 2-Dateisystem und Leistung


Dateien in WSL Version 2 werden auf der virtuellen VHDX-Festplatte gespeichert, ext4 wird als Dateisystem verwendet. Sie können auf rootfs WSL über einen Pfad in folgendem Format zugreifen:

\\wsl$\{DistroName}\

Sie können auch "explorer.exe" eingeben. In der CLI wird ein Windows-Browser im aktuellen Verzeichnis geöffnet.

WSL Version 1 verwendete kein VHDX und hatte einfachen Zugriff auf das Verzeichnis, in dem sich die Linux-Dateien befanden, und Microsoft riet nachdrücklich davon ab , Linux-Dateien von Windows zu ändern. In der neuen Version von WSL wird der Zugriff auf den FS auf einer virtuellen Festplatte über den Dateiserver von Plan 9 Filesystem Protocol bereitgestellt.



In früheren Versionen von WSL gab es Leistungsprobleme mit dem Dateisystem, weil Systemaufrufe über die Windows-API emuliert wurden, der Dateizugriff langsam und instabil war. Ende 2019 änderte WSL 2 seine Architektur und verwendete den nativen Linux-Kernel. Gemessen an der Youtube-Präsentation des neuen Windows-Subsystems für Linux: Bei einem tiefen Eintauchen konnte die Leistung von Festplattenoperationen um das 2- bis 5-fache gesteigert werden.

Die maximale Festplattenkapazität ist auf 256 GB begrenzt. Wenn dieses Volumen überschritten wird, müssen Sie die Größe ändern. Die Anweisungen finden Sie in der Dokumentation .

Die WSL hatte anfangs Probleme, Ressourcen freizugeben, nachdem sie RAM verwendet hatte. Build 19013 löste dieses Problem. Wenn Sie anspruchsvolle Aufgaben ausführen (z. B. das Zusammenstellen einer Rostanwendung ), werden Sie feststellen, dass sich der Vmmem- Prozess im oberen Bereich des Task-Managers befindet, der Speicherverbrauch in den letzten Versionen von WSL jedoch erheblich gesunken ist.



Netzwerk


Der Hostname (Hostname) in Linux wird vom PC-Namen in Windows abgeleitet, unabhängig davon, was in / etc / hostname oder mit dem Befehl hostnamectl set-hostname geschrieben ist .

Im Gegensatz zur ersten Version arbeitet das Netzwerk in WSL 2 über einen virtuellen Hyper-V-Switch:

❯❯ ipconfig.exe | grep IPv4
IPv4 Address. . . . . . . . . . . : 192.168.88.200
IPv4 Address. . . . . . . . . . . : 172.31.160.1
IPv4 Address. . . . . . . . . . . : 172.27.144.1

❯❯ ip -br -4 ad show dev eth0
eth0 UP 172.27.150.196/20
❯❯ ip ro list default
default via 172.27.144.1 dev eth0




In diesem Fall wird das Netzwerk 172.27.144.0/20 unter WSL verwendet. Die erste Adresse ( 172.27.144.1 ) ist das Windows-Hostsystem.

Unter Linux können Sie über das Netzwerk auf Host-Dienste (unter Windows) zugreifen. Beispiel:

❯❯ nmap -p 3389 $(cat /etc/resolv.conf | grep nameserver | awk '{print $2}')

Die Windows-IP-Adresse stammt aus /etc/resolv.conf und wird dort automatisch gemäß den Einstellungen von wsl.conf generiert.

Wenn Sie umgekehrt von einer Windows-Anwendung aus eine Verbindung zu einem Linux-Socket benötigen, müssen Sie auf die IP-Adresse der WSL zugreifen. Es gibt eine Einschränkung: Unter Linux darf der Dienst nicht auf localhost (127.0.0.1) , sondern auf der Adresse 0.0.0.0 ausgeführt werden . Um beispielsweise den SOCKS5-Proxy schnell auf Ihren VPS zu heben, müssen Sie SSH mit dem Parameter für die dynamische Portweiterleitung starten:

❯❯ ssh -D 0.0.0.0:2299 -N -f proxy.example.com

Anschließend registrieren Sie in der Windows-Anwendung, z. B. Chrome, als SOCKS5-Adresse nicht den lokalen Host, sondern die WSL-Adresse, in diesem Fall 172.27.150.196 . Übrigens wird es auf solch einfache Weise möglich, den Datenverkehr über VPS in Chrome zu tunneln und den Zugriff auf Websites über IPv6 zu nutzen.



Linux ändert seine IP-Adresse jedes Mal nach einem Neustart. In Szenarien, in denen eine Port-Weiterleitung ständig funktioniert und automatisch gestartet werden muss, müssen Sie nach einer Problemumgehung suchen. Es gibt viele Möglichkeiten, um dieses Problem zu lösen. Sie können mehr in dieser Ausgabe über Github lesen. Ich habe das Dienstprogramm go-wsl2-host verwendet , das den Windows-Dienst implementiert, der der Windows -Hostdatei automatisch die WSL-IP-Adresse hinzufügt, sodass Sie einen Hostnamen wie ubuntu.wsl auf dem Hostsystem registrieren und auf Linux zugreifen können. All diese Krücken funktionieren jedoch nicht sehr gut, und es bleibt abzuwarten, bis Microsoft diese Probleme behoben hat.



UPD Während ich diesen Artikel schrieb, stellte ich fest, dass es Updates (Build 18945 ) gab, mit denen es möglich wurde, über Services über localhost auf Services zuzugreifen , die in WSL ausgeführt werden. Es stellte sich heraus, dass es einen Fehler gab, aufgrund dessen er immer noch nicht für alle funktionierte . Der Fix im August-Build ist 18970 . Da nicht jeder Updates erhält, auch wenn ich Mitglied des Windows Insiders-Programms war, habe ich die Informationen nicht angepasst. Vielleicht hilft es jemandem, die Netzwerkinteraktion einzurichten.

OpenSSH unter Windows und Autostart-Dienste


Windows 10 wird wie Windows Server 2019 mit einem OpenSSH-Zweig ausgeliefert , der alle bekannten Dienstprogramme ssh-keygen, ssh-add, scp und andere enthält, einschließlich ssh-agent und sshd-server. Sowohl der Client als auch der Server können über Apps> Apps und Funktionen> Optionale Funktionen verwalten installiert werden. Die ssh-Clientversion ist jedoch nicht die neueste. Ich stieß auf einen Fehler, der es mir nicht ermöglichte , über den Sprunghost mit der ProxyJump- Option eine Verbindung zum Host herzustellen, und es stellte sich heraus, dass dieses Problem behoben war, ich musste jedoch das Client-SSH manuell aktualisieren. Sie können die aktuelle Version von Win32 OpenSSH installieren, indem Sie zip aus dem Abschnitt " Releases " auf den Github herunterladen und entpacken, z. B. in C: \ Programme \ OpenSSH . Die Drittanbieter-Software ssh.exe (z. B. im Remote-Entwicklungsmodus in VSCode) wird von $ PATH ( % SYSTEMROOT% \ System32 \ OpenSSH \ ) aufgerufen. Sie müssen die Umgebungsvariable ändern. Umgebungsvariablen werden über die GUI in Start> Bearbeiten der Systemumgebungsvariablen ( Start> Ändern der Systemumgebungsvariablen ) geändert. Dort müssen Sie einen neuen Weg über die alte Version setzen.

Da Systemd in WSL nicht funktioniert, liegt ein Problem beim Starten von Diensten mit dem Systemstart vor. Es gibt verschiedene Möglichkeiten, den automatischen Start von ssh-Servern in WSL zu konfigurieren. Am einfachsten ist es, im Taskplaner eine Aufgabe zu erstellen, in der Sie den Serverstartbefehl angeben können. Im Internet finden Sie verschiedene Startanweisungen über die Skripte vbs , ps1 oder bat . Das Problem bei fast allen Methoden ist, dass der Auslöser das Starten des Windows-Hauptbetriebssystems ist. Wenn die WSL abstürzt und Sie das System neu starten müssen ( wsl -t ), wird Linux gestartet, ohne dass ein Dienst ausgeführt wird. Beim Start von Windows wird die WSL-Verteilung erst beim ersten Zugriff gestartet.

Ich verwende den SSH-Server auf einem Laptop in der WSL, damit ich remote von Maschine zu Maschine wechseln kann. Aufgrund der Tatsache, dass ich SSH-Portweiterleitungstechniken und eine gut durchdachte zentrale Konfiguration von SSH-Clients verwende, kann ich transparent zu allen meinen Servern wechseln und anstelle von Adressen einen Hostnamen eingeben. Das heißt, auch wenn Sie einen der Laptops mit dem Mobilfunknetz verbinden, stellt der autossh-Daemon eine Verbindung zum Jump-Host her und ich kann immer noch zum Computer gehen, ohne dass NAT ein Hindernis ist. Deshalb ist es für mich wichtig, dass sshd immer aktiv ist.



Die einzige Möglichkeit, auf SSH in WSL zuzugreifen, besteht darin, den SSH-Port weiterzuleiten. Dies kann von der WSL selbst mit RemoteForward oder von einem anderen Server im Heimnetzwerk aus erfolgen. Nur wenige Leute brauchen es, und dies ist bereits eine fortgeschrittene Stufe. Daher gebe ich nur einen Arbeitsbefehl:

❯❯ ssh -R '*:2363:*:22' -N -f mt.example.com

Wenn Sie sich jetzt mit der Adresse mt.example.com:2263 verbinden, können Sie direkt zur WSL gelangen.

Wenn Sie den SSH-Server in WSL auslösen möchten , müssen Sie die erforderlichen Server- Startparameter in / etc / ssh / sshd_config konfigurieren . Um Konflikte mit der Dienstbindung an Port 22 zu vermeiden, sollte der OpenSSH-Server in Windows deaktiviert oder vollständig entfernt werden, wenn er installiert ist ( Apps> Apps und Funktionen> Optionale Funktionen verwalten ).

X Weiterleitung


Es stellte sich als angenehm heraus, dass es in Windows 10 ein Dienstprogramm clip.exe gibt , mit dem Sie stdout direkt in die Windows-Zwischenablage umleiten können. Dies ist bequem in Programmen wie tmux zu verwenden, und dank der Weiterleitung des X-Servers kann Text auch von Remote-Hosts kopiert werden. Damit alles funktioniert, muss immer ein X-Server unter Windows ausgeführt werden und die Variable $ DISPLAY richtig eingestellt sein.

Eine etwas langweilige Theorie. Auf * nix-Systemen, auf denen X ausgeführt wird, gibt es verschiedene Arten von Zwischenablagen ( primäre, sekundäre, Zwischenablage ). Im Kontext dieses Artikels ist dies nicht so wichtig, aber wichtig für ein allgemeines Verständnis des Arbeitsmechanismus. Es gibt zwei Dienstprogramme (xclip und xsel) für die Arbeit mit Zwischenablagen unter Linux. Beide Dienstprogramme haben ähnliche Funktionen, in xsel ist sie etwas größer, aber die grundlegenden Funktionen, die zum Weiterleiten des Inhalts des Puffers benötigt werden, sind dieselben. In X-Anwendungen fällt der ausgewählte Text in die primäre Auswahl, er wird mit der mittleren Maustaste eingefügt, in xclip und xsel wird standardmäßig die primäre Auswahl verwendet.

Um beispielsweise den Inhalt einer Variablen in den Standardpuffer zu kopieren, müssen Sie stdout ohne zusätzliche Parameter an stdin des Dienstprogramms xclip übergeben:

❯❯ echo -n $DISPLAY | xclip

Führen Sie xclip mit der Option -o aus , um den Inhalt des Standardpuffers anzuzeigen:

❯❯ xclip -o
172.20.160.1:0


Damit die Zwischenablage über den X-Server umgeleitet wird und Grafikanwendungen auf dem lokalen X-Server ausgeführt werden, müssen Sie die IP-Adresse, die das Standardgateway für WSL ist, in der Variablen $ DISPLAY festlegen . Bisher wurde nichts Besseres erfunden, als es aus der resolv.conf (die von Windows automatisch generiert wird) zu übernehmen. Daher ist es am einfachsten, den Export der Variablen $ DISPLAY im Shell-Profil zu registrieren (z. B. ~ / .zshrc für zsh).

❯❯ echo "export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0" >> ~/.zshrc



Als X-Server habe ich den freien VcXsrv gewählt , er kann mit dem Buffer arbeiten, hat verschiedene Fensteranzeigemodi und wird von der Kommandozeile aus mit den vorgegebenen Optionen gestartet. Über den Link zum Hauptmenü sehen Sie alle Optionen.

Sie können im Taskplaner eine Autorun-Task für den X-Server wie folgt erstellen:

Triggers: At startup
Actions: Start a program
____Program: "%ProgramFiles%\VcXsrv\vcxsrv.exe"
____Arguments: -wgl -dpi auto -ac -multiwindow


SSH-Schlüssel


Damit Windows-Programme SSH-Schlüssel verwenden können (z. B. einen Editor bei der Arbeit mit einem entfernten GitHub-Repository) und gleichzeitig keine zweite Kopie von Schlüsseln in WSL vorhanden ist, ist es am besten, Schlüssel in Windows % HOMEPATH% / .Ssh zu generieren und Symlinks im Home-Bereich zu erstellen WSL-Verzeichnisse.

ssh-keygen -f /mnt/c/Users/${WIN_USER}/.ssh/id_rsa -b 4096
ln -sf /mnt/c/Users/${WIN_USER}/.ssh/id_rsa ${HOME}/.ssh/id_rsa
ln -sf /mnt/c/Users/${WIN_USER}/.ssh/id_rsa.pub ${HOME}/.ssh/id_rsa.pub


Oder Sie können in ~ / .ssh / config den Parameter IdentityFile angeben, indem Sie den Pfad zu den Schlüsseln auf der Windows-Festplatte angeben:

Host *
IdentityFile /mnt/c/Users/${WIN_USER}/.ssh/id_rsa


Wenn die Schlüssel von irgendwoher kopiert wurden und die Dateiberechtigungen nicht korrekt eingestellt sind, korrigieren Sie die Berechtigungen:

chmod 600 /mnt/c/Users/${WIN_USER}/.ssh/id_rsa
chmod 644 /mnt/c/Users/${WIN_USER}/.ssh/id_rsa.pub
chmod 700 /mnt/c/Users/${WIN_USER}/.ssh




Wenn Sie also den Zugriff mit SSH-Schlüsseln weiter einstellen , wird der Benutzer sowohl bei Windows- als auch bei Linux-Anwendungen durch einen Schlüsselsatz an einer Stelle eindeutig identifiziert. Jetzt können Sie den öffentlichen Schlüssel zu den Servern / Diensten hinzufügen, auf denen Sie von diesem Computer gehen müssen. Wenn andere Geräte im Heimnetzwerk SSH-Zugriff benötigen, ist es korrekt, Ihren öffentlichen Schlüssel auf diese Server zu kopieren ( ssh-copy-id ), Sie müssen jedoch nicht die Schlüssel von einem Server auf einen anderen kopieren. Da es möglich (und erforderlich) ist, ssh-agent bei der Arbeit über SSH zu verwenden, achtet der Agent bei der Verbindung von einem Server zu einem anderen darauf, dass die Autorisierung für den weitergeleiteten Schlüssel erfolgt. Damit alles ordnungsgemäß und wie erwartet funktioniert, müssen Sie sich um die Datei ~ / .ssh / config kümmern , in der Sie alle erforderlichen Optionen registrieren müssen.

Host *
TCPKeepAlive yes
ServerAliveInterval 30
ServerAliveCountMax 3
ForwardAgent yes
AddKeysToAgent yes
ForwardX11 yes
ForwardX11Trusted yes


Welches Terminal für Linux unter Windows ausgewählt werden soll


Zunächst möchte ich einen kleinen Überblick über vorhandene Terminal-Shells für Windows geben, auf denen WSL ausgeführt werden kann. Unter Benutzern ist der funktionale MobaXterm- Prozessor beliebt , mit dem verschiedene Sitzungen erstellt werden können, einschließlich grafischer Sitzungen (WSL, Bash / Zsh, Mosh, RDP, VNC usw.), mit denen Sie Makros erstellen und Skripte ausführen können. ssh agent, autorun ssh port forwarding und hat sogar einen eingebauten ftp / tftp / http server, aber das produkt ist closed source und darüber hinaus bezahlt. Hyper ist ein weiterer, moderner Terminal-Emulator, mit dem Sie die WSL-Shell ausführen können. Das Terminal basiert auf HTML / JS / CSS und wird mithilfe von Plug-Ins in Form von node.js-Modulen erweitert ( fantastische Liste ). Es gibt andere Terminals, mit denen Sie WSL mit unterschiedlichem Ausmaß an Krücken ausführen können ( ConEmu , sein Fork Cmder , WSLtty usw.), aber ich werde sie unbeaufsichtigt lassen.



In diesem Artikel werden wir weiter auf das Windows-Terminal eingehen , auf das ich kürzlich umgestiegen bin, und bis jetzt erlebe ich nur positive Emotionen. Terminal befindet sich noch in der Beta, funktioniert aber recht stabil. Von den derzeit implementierten Funktionen Multitab, Trennung von Panels (Aufteilen), benutzerdefinierten Profilen von Terminalverbindungen, Farbschemata gibt es nichts mehr aufzulisten. Aber diese Funktionalität reicht völlig aus, mir gefällt auch, dass die Software nicht überflüssig wird - als ob sich die Entwickler an das KISS- Prinzip halten.

Das Terminal wurde aus dem Windows Console-Projekt (ConPTY) entwickelt und lernte, wie ANSI / VT-Sequenzen, 24-Bit-RGB-True Color und UTF-8 unterstützt werden. Folgen Sie den Links ( Anfang , Fortsetzung ) auf Habré, einer wundervollen Übersetzung einer Reihe von Windows-Befehlszeilen- Blogposts : In der Windows-Konsole , die über die Entstehungsgeschichte von Terminals, verwandte Standards für die Übertragung von Escape-Sequenzen, Codepages, Unicode, die Entstehung von Terminalemulatoren und die Zukunft informiert schon eine evolution der windows befehlszeile. Technologen könnten interessiert sein. Das Entwicklerteam, das an diesem Open Source-Projekt arbeitet, verwaltet das Windows-Befehlszeilen- Devlog, das mehr als nur für WSL und Windows Terminal vorgesehen ist. Ich hätte vorher nie geglaubt, dass ich die Entwicklung von MS-Produkten mit Interesse verfolgen würde, aber was sie als Teil der Entwicklung von WSL, Terminal und VSCode tun, verdient wirklich Respekt. Wie die Entwicklung der WSL begann, wird in Microsoft Open Source Stories (es gibt eine Übersetzung auf Habré) beschrieben. Microsoft ist übrigens seit 2016 Platin-Mitglied der Linux Foundation .

Installieren und konfigurieren Sie Windows Terminal


Sie können Windows Terminal aus dem Windows Store installieren oder die Binärdatei aus dem Abschnitt " Releases " auf den Github des Projekts herunterladen. Dort finden Sie auch alle relevanten Informationen, Anweisungen und häufig gestellten Fragen. Das Terminal benötigt mindestens eine Version von Windows 1903 und Build 18362 . Die Installation sollte vorzugsweise über den Windows Store erfolgen, da in diesem Fall die Aktualisierung direkt über den Store einfacher ist. Updates werden regelmäßig veröffentlicht, eine Roadmap der ersten Version des Terminals ist auf dem Github hinterlegt. Momentan sind alle Funktionen von Version 1 bereits implementiert (laut Plan, um alle Verbesserungen bis Ende 2019 umzusetzen), dann sind einige Monate Arbeit zur Behebung von Fehlern und im April 2020 die offizielle Veröffentlichung von Terminal v1.0 geplant. Es ist schön, dass MS jetzt auf dem Github ist, ihre Software hat gelernt, Protokolle anzuzeigen, verständliche Fehler und Probleme sind leicht zu googeln.



Es gibt noch nicht viele Einstellungen im Terminal, aber sie reichen für ein komfortables Arbeiten aus. Das Produkt wird aktiv weiterentwickelt. Auf Github können Benutzer eine Funktionsanforderung oder einen Fehlerbericht erstellen. Entwickler diskutieren Probleme mit Benutzern und bieten häufig Umgehungsmöglichkeiten an, wenn ein Fehler entdeckt wird.



Die Konfiguration wird im json-Format gespeichert und nach dem Speichern sofort angewendet. Dies ist nur deshalb praktisch, weil Sie bewährte Methoden für die Verwaltung der Konfiguration der Arbeitsumgebung anwenden können. Ich speichere alle Linux-Konfigurationen im Git-Repository. Unter Windows verwende ich nur VSCode aus dem Arbeitstool, mit dem die Konfiguration über github gist synchronisiert werden kann, und speichere die lokale Arbeitsbereichskonfiguration separat in Punktdateien . Das Terminal bewegt sich also in dieselbe Richtung und verwendet dieselben Hotkeys und das Konfigurationsformat wie VSCode. Übrigens ist das Bearbeiten einer Konfiguration über VSCode praktisch, insbesondere wenn Sie diesen hervorragenden Editor von MS bereits verwenden. Die Terminalkonfigurationsdatei enthält bereits viele Standardeinstellungen, und mit dem richtigen Editor können Sie alle Optionen mit einer Beschreibung der Schlüssel- und Wertoptionen aus dem Schema anzeigen (dies ist besonders praktisch, wenn das Projekt noch nicht vollständig dokumentiert ist). Außerdem sind alle IDE-Chips in Form von Auto-Vervollständigung, Intellisense, Syntaxprüfung, Formatierung usw. verfügbar.



Die Dokumentation für Entwickler ist hier verfügbar, aber hier ist eine kleine Seite mit Dokumentation für Benutzer. Eine separate Seite ist den Einstellungen gewidmet, die in die json-Konfigurationsdatei geschrieben sind. Von dort können Sie feststellen, dass die Einstellungen strukturell unterteilt sind in:

  • Global (Standardprofil, Anfangsgröße des Terminalfensters, Thema usw.)
  • Schlüsselbindungen
  • Profile (Einstellungen für jedes Terminal)
  • Schemata (Farbschemata)

Es gibt so etwas wie dynamische Profile, sie erscheinen automatisch in der Konfiguration und haben die Eigenschaft source . Dies gilt für Distributionen von WSL und Azure Cloud Shell. WSL (, Ubuntu), GUID , source , commandline wsl -d {DistroName} .

Schriften


- , . :


Fira Code , . , CLI , , .



Windows . github releases .

( fontFace ) Character Map ( ). , Start -> Settings -> Personalization -> Fonts , , , .



Fazit


, , Windows Terminal WSL. ZSH tmux, VM dotfiles . , / / . Docker WSL 2 , , .

, , - . - , , . - , , .

Referenzen


Source: https://habr.com/ru/post/de481746/


All Articles