Ultimamente sto zitto dappertutto. I SSH in Linux da Windows utilizzando il client OpenSSH integrato che Windows 10 ha distribuito per anni di cui non eri a conoscenza.;) Non hai bisogno di Putty in SSH con Windows (a meno che non ti renda felice, quindi stucco, amico mio.)
Aggiunta del server OpenSSH a Windows
Da un PowerShell amministrativo vedrò quali elementi OpenSSH ho abilitato. Posso farlo anche digitando "Caratteristiche di Windows" dal menu Start.
> Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'
Name : OpenSSH.Client~~~~0.0.1.0
State : Installed
Name : OpenSSH.Server~~~~0.0.1.0
State : NotPresent
Sembra che io abbia il client OpenSSH ma non il server. Posso SSH da Windows, ma non per.
Lo aggiungerò con un comando simile con la versione super stravagante ma apparentemente necessaria alla fine:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Avvio di SSHD su Windows as a Service
Una volta terminato (e ovviamente puoi eseguirlo anche con OpenSSH.Client per ottenere entrambi i lati se non l'hai fatto), puoi avviare il server SSH (come servizio Windows) con questo, quindi assicurati che sia in esecuzione.
Start-Service sshd
Get-Service sshd
Poiché si tratta di un servizio Windows, puoi vederlo come "OpenSSH SSH Server" in services.msc e impostarlo per l'avvio automatico all'avvio, se lo desideri. Puoi farlo di nuovo, da PowerShell se preferisci
Set-Service -Name sshd -StartupType 'Automatic'
Ricorda che eseguiamo SSH sulla porta 22, quindi a questo punto avrai una regola del firewall in arrivo su 22. Sta a te essere consapevole della sicurezza. Forse consenti SSHing nella tua macchina Windows solo con chiavi pubbliche (senza password) o forse non ti dispiace. Basta essere consapevoli, dipende da te, non da me.
Ora, da qualsiasi macchina Linux (o Windows) posso SSH nella mia macchina Windows come un professionista! Nota che sto utilizzando il suffisso di dominio .local per assicurarmi di non avere una macchina sulla mia VPN (rimanendo nella mia sottorete locale)
$ ssh [email protected]
Microsoft Windows [Version 10.0.19041.113]
(c) 2020 Microsoft Corporation. All rights reserved.
scott@IRONHEART C:\Users\scott>pwsh
PowerShell 7.0.0
Copyright (c) Microsoft Corporation. All rights reserved.
https://aka.ms/powershell
Type 'help' to get help.
Loading personal and system profiles took 1385ms.
⚡ scott@IRONHEART>
Nota che quando sono entrato in SSH in Windows ho ottenuto la shell cmd.exe predefinita. Ricorda anche che c'è una differenza tra una console, un terminale e una shell! Posso ssh con qualsiasi terminale in qualsiasi macchina e finire in qualsiasi shell. In questo caso, il DEFAULT era cmd.exe, che non è ottimale.
Configurazione della shell predefinita per OpenSSH in Windows
Sul mio server (la macchina Windows in cui sto utilizzando SSH) imposterò una chiave di registro per impostare la shell predefinita. In questo caso, utilizzerò PowerShell Core multipiattaforma open source. Puoi usare tutto ciò che ti rende felice.
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Program Files\PowerShell\7\pwsh.exe" -PropertyType String -Force
Ora quando ssh nella mia macchina Windows da altrove (anche dal mio iPad!) ottengo la shell che voglio:
$ ssh [email protected]
PowerShell 7.0.0
Copyright (c) Microsoft Corporation. All rights reserved.
https://aka.ms/powershell
Type 'help' to get help.
Loading personal and system profiles took 1854ms.
⚡ scott@IRONHEART>
Ancora meglio se volessi aggiungere una voce di menu (profilo) al mio Terminale Windows con una voce per il mio computer Windows che mi acceda automaticamente da altrove usando le chiavi pubbliche, potrei farlo anche io!
Inoltre, ora che è impostato, posso utilizzare WinSCP (disponibile su Window Store) e scp (Secure Copy) per trasferire i file.
Ovviamente puoi anche usare WinRM o PowerShell Remoting su SSH ma per la mia piccola rete interna ho trovato questo meccanismo semplice e pulito. Ora il mio zittire è aconfessionale!
Sponsor: Hai già provato a sviluppare in Rider? Questo IDE multipiattaforma veloce e ricco di funzionalità migliora il codice per le applicazioni .NET, ASP.NET, .NET Core, Xamarin e Unity su Windows, Mac e Linux.