{"id":655,"date":"2022-08-30T14:32:14","date_gmt":"2022-08-30T14:32:14","guid":{"rendered":"https:\/\/www.cssec.de\/blog\/?p=655"},"modified":"2022-08-30T14:32:14","modified_gmt":"2022-08-30T14:32:14","slug":"git-und-ssh-unter-windows-10","status":"publish","type":"post","link":"https:\/\/www.cssec.de\/blog\/2022\/08\/30\/git-und-ssh-unter-windows-10\/","title":{"rendered":"Git und SSH unter Windows 10"},"content":{"rendered":"<p>Heute hatte ich mal eine Anfrage von einem Mitarbeiter eines relativ neuen Kunden, er hatte ein neues Notebook und musste sich einige Tools (u.a. Visual Studio Code) einrichten. Dazu geh\u00f6rte auch, ein Git-Repository des Kunden entsprechend abzurufen.<\/p>\n<p>Ich pers\u00f6nlich nutze ja immer das Windows Subsystem for Linux 2, mit dem ich einfach mit einer Ubuntu-Kommandozeile dann die ganzen Git-Dinge mache.<br \/>\nDas funktioniert auch ganz gut, bis eben auf die Integration in Visual Studio Code, bei dem z.B. ein pull oder push eben nicht funktioniert, da das Git-Repository \u00fcber SSH und Private\/Public-Key angebunden ist.<\/p>\n<p>Beim Push\/Pull wird dann eben nicht der Schl\u00fcssel erkannt \/ gefunden und die Aktion schl\u00e4gt entsprechend fehl.<\/p>\n<p>Fr\u00fcher musste man ja immer Git und SSH \u00fcber externe Tools (z.B. putty) installieren, was ziemlich genervt und manchmal etwas umst\u00e4ndlich war. Inzwischen hat Windows 10 seit Version 1809 aber SSH integriert, was mir heute auch neu war, aber was nat\u00fcrlich der Hammer ist.<\/p>\n<p>Das ganze installiert man am besten \u00fcber die Powershell.<\/p>\n<p>Startet daher als erstes die Powershell als Administrator (Start-Men\u00fc -&gt; Powershell eintippen -&gt; &#8222;Windows Powershell&#8220; -&gt; rechts klicken -&gt; &#8222;Als Administrator ausf\u00fchren&#8220;).<\/p>\n<p><img fetchpriority=\"high\" decoding=\"async\" class=\"alignnone size-full wp-image-658\" src=\"https:\/\/www.cssec.de\/blog\/wp-content\/uploads\/2022\/08\/Powershell_starten.png\" alt=\"\" width=\"793\" height=\"441\" srcset=\"https:\/\/www.cssec.de\/blog\/wp-content\/uploads\/2022\/08\/Powershell_starten.png 793w, https:\/\/www.cssec.de\/blog\/wp-content\/uploads\/2022\/08\/Powershell_starten-300x167.png 300w, https:\/\/www.cssec.de\/blog\/wp-content\/uploads\/2022\/08\/Powershell_starten-768x427.png 768w\" sizes=\"(max-width: 793px) 100vw, 793px\" \/><\/p>\n<p>Damit verschiedene Services SSH nutzen k\u00f6nnen, aktiviert am besten erst einmal den SSH-Agent. Dieser sorgt daf\u00fcr, dass SSH-Verbindungen, die aufgebaut werden sollen an die Schl\u00fcsselpaare kommen.<\/p>\n<p>F\u00fchrt dazu folgende Befehle aus:<\/p>\n<p><code>Set-Service ssh-agent -StartupType Automatic<br \/>\n<\/code><code>Start-Service ssh-agent<br \/>\nGet-Service ssh-agent<\/code><\/p>\n<p>Die letzte Zeile sollte Euch entsprechend Infos andrucken:<\/p>\n<blockquote><p>Status Name DisplayName<br \/>\n&#8212;&#8212; &#8212;- &#8212;&#8212;&#8212;&#8211;<br \/>\nRunning ssh-agent OpenSSH Authentication Agent<\/p><\/blockquote>\n<p>Sollte das nicht funktionieren, stellt sicher, dass ihr die Powershell wirklich mit Administrator-Rechten gestartet habt!!<\/p>\n<p>Nun generiert ihr Euer Schl\u00fcsselp\u00e4rchen mit folgendem Befehl:<\/p>\n<p><code>ssh-keygen<\/code><\/p>\n<p>Sobald ihr den Befehl abgeschickt habt, fragt Euch ssh-keygen, an welcher Stelle das Key-P\u00e4rchen abgelegt werden soll. Lasst es am besten im Standardverzeichnis (Nutzerverzeichnis C:\\Users\\xxx\\.ssh\\id_rsa)\u00a0 (ersetzt xxx durch euren Nutzernamen).<br \/>\nAnschlie\u00dfend wird man nach einer Passphrase gefragt, lasst diese am besten leer. Dann wird noch einmal nach der Passphrase gefragt (als Best\u00e4tigung), lasst auch diese leer.<br \/>\nSobald ihr das best\u00e4tigt habt, werden public und private Key erzeugt.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-659\" src=\"https:\/\/www.cssec.de\/blog\/wp-content\/uploads\/2022\/08\/ssh-keygen.jpg\" alt=\"\" width=\"488\" height=\"296\" srcset=\"https:\/\/www.cssec.de\/blog\/wp-content\/uploads\/2022\/08\/ssh-keygen.jpg 488w, https:\/\/www.cssec.de\/blog\/wp-content\/uploads\/2022\/08\/ssh-keygen-300x182.jpg 300w\" sizes=\"(max-width: 488px) 100vw, 488px\" \/><\/p>\n<p>Nun k\u00f6nnen wir das generierte Schl\u00fcsselp\u00e4rchen einfach dem ssh-agent bekannt machen. Gebt dazu einfach folgenden Befehl ein:<\/p>\n<p><code>ssh-add<\/code><\/p>\n<p>Das sollte dann:<\/p>\n<blockquote><p>Identity added: C:\/Users\/xxx\/.ssh\/id_rsa (C:\\Users\\xxx\/.ssh\/id_rsa)<\/p><\/blockquote>\n<p>andrucken.<\/p>\n<p>Prima, euer SSH-Key ist jetzt erzeugt und beim ssh-agent hinterlegt.<\/p>\n<p>Damit euer Schl\u00fcssel dann auf dem Server angenommen wird, m\u00fcsst ihr den public key in der authorized_keys-Datei auf dem Server hinterlegen. Leider bietet Windows im Gegensatz zu Linux nicht den eleganten Weg mit dem <strong>ssh-copy-id<\/strong>-Tool, sondern man muss das manuell machen.<br \/>\n\u00d6ffnet im Verzeichnis C:\\Users\\xxx\\.ssh die Datei: id_rsa.pub im Editor oder Wordpad und kopiert Euch den gesamten Inhalt der Datei in der Zwischenablage.<br \/>\nBaut dann eine Verbindung zu dem Zielserver auf und loggt Euch (einmalig) mit Nutzername \/ Kennwort ein.<br \/>\nWechselt dann in das .ssh-Verzeichnis des Server-Benutzers:<\/p>\n<p><code><br \/>\ncd .ssh<\/code><\/p>\n<p>und editiert die authorized_keys-Datei mit einem Editor eurer Wahl (nano, pico, vi, &#8230;)<br \/>\nH\u00e4ngt einfach eine Zeile an und kopiert dort den Schl\u00fcssel aus der id_rsa.pub in diese Zeile und speichert die Datei.<\/p>\n<p>Sollte die authorized_keys-Datei noch nicht existiert haben (d.h. wurde neu angelegt), muss bei dieser noch die Berechtigung korrekt gesetzt werden. Macht das mit folgendem Befehl:<\/p>\n<p><code><\/code><code>chmod 600 authorized_keys<\/code><\/p>\n<p>Beendet die Sitzung und versucht noch einmal, eine SSH-Verbindung aufzubauen. Das sollte nun grunds\u00e4tzlich funktionieren, auch ohne Passwort.<\/p>\n<p>Et voila, eure SSH-Sitzung funktioniert nun.<\/p>\n<p>Nun richten wir noch git ein. Ebenfalls seit einer neueren Windows-Version k\u00f6nnt ihr Git auch direkt \u00fcber die Powershell installieren. Wenn ihr Git f\u00fcr alle Nutzer installieren m\u00f6chtet, nutzt wiederum eine Powershell mit Administrator-Rechten, grunds\u00e4tzlich k\u00f6nnt ihr die Installation aber auch vornehmen, ohne spezielle Admin-Rechte, dann wird Git nur f\u00fcr Euren Nutzer installiert.<\/p>\n<p>F\u00fchrt in der Powershell folgenden Befehl aus:<\/p>\n<p><code>winget install --id Git.Git -e --source winget<\/code><\/p>\n<p>F\u00fcr den unwahrscheinlichen Fall, dass das nicht funkioniert, sondern ihr folgende Meldung (in rot) bekommt:<\/p>\n<blockquote><p>winget : The term &#8218;winget&#8216; is not recognized as the name of a cmdlet, function, script file, or operable program.<br \/>\nCheck the spelling of the name, or if a path was included, verify that the path is correct and try again.<br \/>\nAt line:1 char:1<br \/>\n+ winget<br \/>\n+ ~~~~~~<br \/>\n+ CategoryInfo : ObjectNotFound: (winget:String) [], CommandNotFoundException<br \/>\n+ FullyQualifiedErrorId : CommandNotFoundException<\/p><\/blockquote>\n<p>installiert bitte die App: &#8222;App Installer&#8220; aus dem Windows Store. Nach der Installation sollte winget als Befehl zur Verf\u00fcgung stehen.<\/p>\n<p>Nach dem Download von Git solltet ihr die entsprechenden Eintr\u00e4ge im Start-Men\u00fc haben (Git Gui, Git CMD (Deprecated), Git Bash).<br \/>\nInstalliert ihr das ganze als Administrator, sollte Git bereits in Eurem Pfad hinterlegt sein. Im anderen Fall, passt bitte die Einstellungen des Systempfads an und f\u00fcgt das Git-Verzeichnis hinzu, so dass git dann entsprechend ohne Angabe des Pfads aufgerufen werden kann.<\/p>\n<p>Nun k\u00f6nnt ihr in euer Verzeichnis gehen und:<\/p>\n<p><code>git clone &lt;URL&gt;<\/code><\/p>\n<p>starten, wenn alles gut gelaufen ist, sollte euer SSH-Key angenommen werden und euer Repository ausgecheckt werden k\u00f6nnen. Ersetzt die URL nat\u00fcrlich durch den Namen \/ den Login eures Servers am besten in der Form: &lt;username&gt;@&lt;domainname&gt; z.B. git@meinserver.org.<\/p>\n<p>Jetzt k\u00f6nnt ihr in Visual Studio Code einfach den Ordner als Projekt \u00f6ffnen und \u00fcber die Sourcecode-Verwaltungs-Funktionen von Visual Studio Code entsprechend euren Sourcecode, Branches, etc. managen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Heute hatte ich mal eine Anfrage von einem Mitarbeiter eines relativ neuen Kunden, er hatte ein neues Notebook und musste sich einige Tools (u.a. Visual Studio Code) einrichten. Dazu geh\u00f6rte auch, ein Git-Repository des Kunden entsprechend abzurufen. Ich pers\u00f6nlich nutze ja immer das Windows Subsystem for Linux 2, mit dem ich einfach mit einer Ubuntu-Kommandozeile [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":656,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[16],"tags":[74,76,77,75,78],"_links":{"self":[{"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/posts\/655"}],"collection":[{"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/comments?post=655"}],"version-history":[{"count":2,"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/posts\/655\/revisions"}],"predecessor-version":[{"id":660,"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/posts\/655\/revisions\/660"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/media\/656"}],"wp:attachment":[{"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/media?parent=655"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/categories?post=655"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/tags?post=655"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}