Ο Windows Server 2022 έχει τον OpenSSH Server ως προαιρετική δυνατότητα: χωρίς εγκαταστάτη τρίτων, με ενημερώσεις μέσω Windows Update. Μόλις ενεργοποιηθεί, εκτελείτε PowerShell μέσω SSH, αντιγράφετε αρχεία με scp και στρέφετε scripts ή CI στον server όπως σε οποιοδήποτε μηχάνημα Linux.
Όλα τα παρακάτω τα κάναμε στην εικόνα μας Windows Server 2022, σε PowerShell με δικαιώματα διαχειριστή μέσω RDP (πώς να συνδεθείτε).
Πρώτα το δίκτυο. Σε πρόγραμμα Windows με NAT η μόνη εισερχόμενη προώθηση πηγαίνει στο RDP, οπότε το SSH δεν είναι προσβάσιμο από το διαδίκτυο. Για SSH από έξω χρειάζεστε πρόγραμμα με δικό του IPv4, όπως το Windows Small-IP. Όταν η θύρα είναι προσβάσιμη, τα παρακάτω βήματα παίρνουν περίπου πέντε λεπτά.
1. Εγκαταστήστε τον OpenSSH Server
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Ο πελάτης είναι ήδη εγκατεστημένος· ο server εμφανίζεται ως NotPresent μέχρι να τον προσθέσετε. Στον server μας η εγκατάσταση πήρε 28 δευτερόλεπτα.
2. Ξεκινήστε την υπηρεσία και ορίστε αυτόματη εκκίνηση
Start-Service sshd
Set-Service -Name sshd -StartupType Automatic
Get-NetFirewallRule -Name *OpenSSH*
Η εγκατάσταση της δυνατότητας δημιουργεί τον κανόνα τείχους προστασίας OpenSSH-Server-In-TCP (θύρα 22, εισερχόμενα, επιτρέπεται), οπότε δεν χρειάζεται να προσθέσετε δικό σας.
3. Κάντε το PowerShell προεπιλεγμένο κέλυφος
Από προεπιλογή μια συνεδρία SSH καταλήγει στο cmd.exe. Αλλάξτε σε PowerShell:
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force
Οι νέες συνδέσεις παίρνουν αμέσως PowerShell 5.1· δεν χρειάζεται επανεκκίνηση.
4. Κλειδί για τον Administrator: το αρχείο όπου σκοντάφτουν όλοι
Αυτή είναι η πρώτη παγίδα των Windows. Για λογαριασμούς της ομάδας Administrators, το sshd δεν διαβάζει το C:\Users\<name>\.ssh\authorized_keys. Διαβάζει ένα κοινό αρχείο, το C:\ProgramData\ssh\administrators_authorized_keys, και μόνο αν κανείς εκτός από Administrators και SYSTEM δεν μπορεί να γράψει σε αυτό:
$pub = 'ssh-ed25519 AAAA...your-public-key... you@laptop'
Set-Content -Path C:\ProgramData\ssh\administrators_authorized_keys -Value $pub -Encoding ascii
icacls.exe "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"
Μετράει και το -Encoding ascii. Στη δοκιμή μας το ίδιο κλειδί, αποθηκευμένο με Out-File (UTF-16, η προεπιλογή του PowerShell 5.1), απορρίφθηκε με Permission denied (publickey). Από το δικό σας μηχάνημα:
ssh Administrator@YOUR.SERVER.IP
Πρέπει να πάρετε γραμμή εντολών PowerShell χωρίς κωδικό. Για χρήστες χωρίς δικαιώματα διαχειριστή λειτουργεί το συνηθισμένο C:\Users\<name>\.ssh\authorized_keys.
5. Απενεργοποιήστε τη σύνδεση με κωδικό: η δεύτερη παγίδα
Η προφανής αλλαγή, PasswordAuthentication no, δεν αρκεί σε αυτή την έκδοση. Το OpenSSH 8.1 εξακολουθεί να προσφέρει keyboard-interactive, που ζητά τον ίδιο κωδικό των Windows. Στη δοκιμή μας μια σύνδεση χωρίς κλειδί έδειχνε ακόμη keyboard-interactive μέχρι να απενεργοποιήσουμε κι αυτό. Επιπλέον, η ρύθμιση πρέπει να βρίσκεται πριν από το μπλοκ Match Group administrators στο τέλος του αρχείου, αλλιώς ισχύει μόνο για διαχειριστές. Αυτό βάζει και τις δύο γραμμές στην αρχή:
$cfg = 'C:\ProgramData\ssh\sshd_config'
$lines = Get-Content $cfg | Where-Object { $_ -notmatch '^#?\s*(PasswordAuthentication|KbdInteractiveAuthentication|ChallengeResponseAuthentication)\s' }
Set-Content $cfg -Value (@('PasswordAuthentication no', 'ChallengeResponseAuthentication no') + $lines) -Encoding ascii
Restart-Service sshd
Κρατήστε ανοιχτή την τρέχουσα συνεδρία SSH και δοκιμάστε από δεύτερο τερματικό. Μια απόπειρα μόνο με κωδικό πρέπει τώρα να πάρει:
Permission denied (publickey).
Αυτό ήταν το αποτέλεσμα στη δοκιμή μας και για τον Administrator και για απλό χρήστη, ενώ η σύνδεση με κλειδί συνέχισε να δουλεύει.
Τι μπορείτε να κάνετε με αυτό
- Να εκτελείτε εντολή από οπουδήποτε:
ssh Administrator@IP 'Get-Service sshd'. - Να αντιγράφετε αρχεία:
scp .\app.zip Administrator@IP:C:/apps/. - Να περιορίσετε τη θύρα στη διεύθυνσή σας, όπως για το RDP:
Set-NetFirewallRule -Name OpenSSH-Server-In-TCP -RemoteAddress 203.0.113.10.
Ποιο πρόγραμμα
Το SSH από έξω χρειάζεται δημόσιο IPv4: το Windows Small-IP (4 vCPU, 4 GB, 50 GB) κοστίζει $28/μήνα, το Windows Medium-IP (6 vCPU, 6 GB) $36/μήνα. Τα Windows είναι Server 2022 με τη δική σας άδεια (τι είναι το BYOL). Και τα τέσσερα προγράμματα είναι στη σελίδα Windows VPS. Για να συνεχίσει ένα πρόγραμμα να τρέχει μετά την αποσύνδεση, δείτε script 24/7 σε Windows Server.
Σχόλια
Δεν υπάρχουν ακόμη σχόλια. Γίνετε ο πρώτος.