Windows 10 1809 và Windows Server 2019 có sẵn SSH server dựa trên OpenSSH tích hợp. Trong bài này chúng tôi sẽ chỉ cách cài đặt và cấu hình OpenSSH server trên Windows 10 và kết nối đến nó từ xa qua giao thức SSH được bảo vệ (giống như trong Linux 🙂).
Bạn có thể cài OpenSSH server trên các phiên bản Windows trước đó, nhưng bạn phải tự tải và cài OpenSSH cho win32 port từ GitHub (https://github.com/powershell/Win32-OpenSSH). Ví dụ cách cài và cấu hình Win32-OpenSSH được đưa trong bài "How to Install & Configure SFTP Server (SSH FTP) on Windows?".
Cách cài đặt OpenSSH Server trên Windows
Hãy xem cách cài tính năng OpenSSH Server trên Windows 10 1903 (trong Windows Server 2019 quy trình giống hệt nhau).
Gói OpenSSH (giống RSAT) được thêm vào các phiên bản Windows này (và mới hơn) như Feature on Demand (FoD).
Nếu bạn có truy cập Internet trực tiếp, bạn có thể cài OpenSSH dùng PowerShell:
Add-WindowsCapability -Online -Name OpenSSH.Server*
Hoặc dùng DISM:
dism /Online /Add-Capability /CapabilityName:OpenSSH.Server~~~~0.0.1.0
Bạn cũng có thể cài OpenSSH trên Windows 10 qua bảng điều khiển Settings (Apps -> Apps&Features -> Manage optional features -> Add a feature). Tìm Open SSH Server trong danh sách và nhấp Install.

Để chắc chắn OpenSSH server đã cài, chạy lệnh:Get-WindowsCapability -Online | ? Name -like 'OpenSSH.Ser*'
State : Installed

Cấu hình SSH Server trên Windows 10/Windows Server 2019
Sau khi cài OpenSSH server trong Windows, bạn phải thay đổi loại khởi động dịch vụ sshd thành automatic (tự động) và khởi động dịch vụ dùng PowerShell:Set-Service -Name sshd -StartupType 'Automatic'
Start-Service sshd

Dùng netstat, đảm bảo SSH server đang chạy và chờ kết nối trên cổng TCP 22:netstat -na| find ":22"
Đảm bảo Windows Defender Firewall cho phép kết nối inbound đến Windows qua cổng TCP 22:Get-NetFirewallRule -Name *OpenSSH-Server* |select Name, DisplayName, Description, Enabled
Name DisplayName Description Enabled ---- ----------- ----------- ------- OpenSSH-Server-In-TCP OpenSSH SSH Server (sshd) Inbound rule for OpenSSH SSH Server (sshd) True

Nếu rule bị disable (Enabled=False) hoặc thiếu, bạn có thể tạo rule inbound mới dùng cmdlet New-NetFirewallRule:
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
Mặc định, các thành phần quan trọng OpenSSH nằm trong các thư mục sau:
- Thực thi OpenSSH Server:
C:\Windows\System32\OpenSSH\ - File sshd_config (tạo sau lần khởi động dịch vụ đầu tiên):
C:\ProgramData\ssh - Log OpenSSH:
C:\windows\system32\OpenSSH\logs\sshd.log - File authorized_keys và khóa:
%USERPROFILE%\.ssh\
Sau cài OpenSSH, một user cục bộ mới (sshd) được tạo trên máy tính.
File cấu hình OpenSSH Server (sshd_config)
Bạn có thể thay đổi cài đặt OpenSSH server trong file config: %programdata%\ssh\sshd_config.
Ví dụ, để từ chối kết nối SSH cho tài khoản domain cụ thể (hoặc tất cả user domain), thêm các directive này vào cuối file:
DenyUsers woshub\admin@192.168.1.10 DenyUsers corp\*
Để chỉ cho phép kết nối SSH cho nhóm domain cụ thể:
AllowGroups woshub\sshadmins
Hoặc bạn có thể cho phép truy cập cho nhóm cục bộ:
AllowGroups sshadmins
Bạn có thể từ chối truy cập cho tài khoản có đặc quyền admin. Trong trường hợp này, nếu cần thực hiện hành động đặc quyền trong phiên SSH, bạn sẽ phải dùng runas.
DenyGroups Administrators
Các directive sau cho phép truy cập SSH dùng khóa RSA và mật khẩu (chúng ta sẽ xem chi tiết cách dùng khóa RSA truy cập Windows qua SSH trong bài tiếp theo):
PubkeyAuthentication yes PasswordAuthentication yes
Bạn có thể thay đổi cổng OpenSSH nhận kết nối trong directive Port của file sshd_config.

Sau khi thay đổi bất kỳ điều gì trong file sshd_config, bạn cần khởi động lại dịch vụ sshd:
restart-service sshd
Cách kết nối đến Windows 10 qua SSH
Bây giờ bạn có thể thử kết nối đến Windows 10 qua SSH client (tôi dùng PuTTY, nhưng bạn có thể dùng SSH client tích hợp sẵn Windows thay thế).
Lần kết nối đầu, yêu cầu tiêu chuẩn thêm host vào danh sách known SSH hosts sẽ hiện ra.

Nhấp Yes, và đăng nhập vào Windows 10 dưới user Windows.

Nếu kết nối SSH thành công, shell cmd.exe sẽ khởi động với chuỗi prompt.
admin@win10pc C:\Users\admin>

Bạn có thể chạy các lệnh, script hoặc app khác trong command prompt.

Tôi thích làm việc trong console PowerShell. Để khởi động nó, chạy lệnh:
powershell.exe

Để thay đổi shell mặc định cmd.exe sang PowerShell cho OpenSSH, làm thay đổi registry dùng lệnh PowerShell sau:
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String –Force

Khởi động lại kết nối SSH và đảm bảo PowerShell giờ được dùng làm shell SSH mặc định (được chỉ ra bằng PS C:\Users\admin>).

Console PowerShell đã khởi động trong phiên SSH của bạn, và các tính năng quen thuộc hoạt động trong nó: tab autocompletion, highlight màu PSReadLine, lịch sử lệnh, v.v. Nếu user hiện tại là thành viên của nhóm administrators cục bộ, tất cả lệnh phiên được thực hiện với quyền elevated ngay cả khi UAC được bật.