Windows Server 2022 có sẵn OpenSSH Server dưới dạng tính năng tùy chọn: không cần trình cài bên thứ ba, cập nhật qua Windows Update. Khi đã bật, bạn có thể chạy PowerShell qua SSH, chép tệp bằng scp và trỏ script hay CI vào server như với bất kỳ máy Linux nào.
Mọi bước dưới đây được làm trên image Windows Server 2022 của chúng tôi, trong PowerShell có quyền quản trị qua RDP (cách kết nối).
Trước hết là mạng. Trên gói Windows NAT, chuyển tiếp vào duy nhất đi tới RDP, nên SSH không truy cập được từ internet. Muốn SSH từ bên ngoài, bạn cần gói có IPv4 riêng, như Windows Small-IP. Khi cổng truy cập được, các bước dưới đây mất khoảng năm phút.
1. Cài OpenSSH Server
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Client đã có sẵn; server hiện NotPresent cho đến khi bạn thêm vào. Trên server của chúng tôi, việc cài mất 28 giây.
2. Khởi động và cho chạy cùng hệ thống
Start-Service sshd
Set-Service -Name sshd -StartupType Automatic
Get-NetFirewallRule -Name *OpenSSH*
Cài tính năng này sẽ tạo quy tắc tường lửa OpenSSH-Server-In-TCP (cổng 22, chiều vào, cho phép), nên bạn không cần tự thêm.
3. Đặt PowerShell làm shell mặc định
Mặc định, phiên SSH vào cmd.exe. Chuyển sang PowerShell:
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force
Kết nối mới nhận PowerShell 5.1 ngay; không cần khởi động lại.
4. Khóa cho Administrator: tệp khiến ai cũng vấp
Đây là cái bẫy đầu tiên của Windows. Với các tài khoản trong nhóm Administrators, sshd không đọc C:\Users\<name>\.ssh\authorized_keys. Nó đọc một tệp dùng chung, C:\ProgramData\ssh\administrators_authorized_keys, và chỉ khi ngoài Administrators và SYSTEM thì không ai ghi được vào đó:
$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 cũng quan trọng. Trong lần thử của chúng tôi, cùng khóa đó lưu bằng Out-File (UTF-16, mặc định của PowerShell 5.1) đã bị từ chối với Permission denied (publickey). Từ máy của bạn:
ssh Administrator@YOUR.SERVER.IP
Bạn sẽ nhận được dấu nhắc PowerShell mà không cần mật khẩu. Với người dùng không phải quản trị, C:\Users\<name>\.ssh\authorized_keys thông thường vẫn dùng được.
5. Tắt đăng nhập bằng mật khẩu: cái bẫy thứ hai
Thay đổi hiển nhiên PasswordAuthentication no là chưa đủ ở phiên bản này. OpenSSH 8.1 vẫn đưa ra keyboard-interactive, hỏi cùng một mật khẩu Windows. Trong lần thử của chúng tôi, đăng nhập không có khóa vẫn hiện keyboard-interactive cho đến khi chúng tôi tắt cả nó. Ngoài ra, thiết lập phải nằm trước khối Match Group administrators ở cuối tệp, nếu không nó chỉ áp dụng cho quản trị viên. Lệnh này đặt cả hai dòng lên đầu:
$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
Giữ phiên SSH hiện tại mở và thử từ terminal thứ hai. Một lần thử chỉ bằng mật khẩu giờ phải nhận được:
Permission denied (publickey).
Đó là kết quả trong lần thử của chúng tôi cho cả Administrator lẫn người dùng thường, trong khi đăng nhập bằng khóa vẫn hoạt động.
Bạn có thể làm gì với nó
- Chạy lệnh từ bất cứ đâu:
ssh Administrator@IP 'Get-Service sshd'. - Chép tệp:
scp .\app.zip Administrator@IP:C:/apps/. - Giới hạn cổng cho địa chỉ của bạn, giống như với RDP:
Set-NetFirewallRule -Name OpenSSH-Server-In-TCP -RemoteAddress 203.0.113.10.
Chọn gói nào
SSH từ bên ngoài cần IPv4 công khai: Windows Small-IP (4 vCPU, 4 GB, 50 GB) giá $28/tháng, Windows Medium-IP (6 vCPU, 6 GB) $36/tháng. Windows là Server 2022 với giấy phép của chính bạn (giải thích BYOL). Cả bốn gói có trên trang Windows VPS. Để chương trình vẫn chạy sau khi bạn ngắt kết nối, xem chạy script 24/7 trên Windows Server.
Bình luận
Chưa có bình luận nào. Hãy là người đầu tiên.