Thiết lập Windows cho máy phát triển
Hướng dẫn cài Chocolatey, OpenSSH, wget và Ansible trên Windows. Các lệnh dưới đây chạy
trong PowerShell; bước nào cần quyền quản trị đều ghi rõ. Hoàn thành setup nghĩa là mở
PowerShell mới vẫn gọi được choco, ssh và wget, còn Ansible chạy trong WSL.
1. Kiểm tra máy
Mở PowerShell bằng Run as administrator rồi kiểm tra phiên bản và quyền:
winver.exe
$PSVersionTable.PSVersion
(New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
Yêu cầu của OpenSSH tích hợp sẵn: Windows 10 build 1809 hoặc Windows Server 2019 trở lên,
PowerShell 5.1 trở lên, tài khoản thuộc nhóm Administrators. Lệnh cuối phải in True.
2. Cài Chocolatey
Chocolatey là trình quản lý gói dòng lệnh cho Windows. Cần PowerShell quyền quản trị; bản 2.x cần .NET Framework 4.8 và installer sẽ thử cài nếu máy còn thiếu.
Lệnh cài chính thức từ tài liệu Chocolatey:
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
Set-ExecutionPolicy ... -Scope Process chỉ đổi chính sách trong phiên PowerShell hiện tại,
không đổi cấu hình máy. Lệnh này chạy script tải từ Internet; muốn xem trước, tải
install.ps1 về file, đọc nội dung rồi mới chạy.
Kiểm tra sau cài, trong cửa sổ PowerShell mới:
choco -?
choco --version
Không có lỗi nghĩa là Chocolatey đã dùng được. Bảo trì:
choco upgrade chocolatey
choco outdated
Cài hoặc nâng cấp gói cũng cần PowerShell quyền quản trị, ví dụ choco install wget.
3. Cài OpenSSH
Windows có OpenSSH Client và Server dưới dạng Feature on Demand do Microsoft bảo trì qua Windows Update. Xem tài liệu OpenSSH của Microsoft cho bản cài mới nhất. Windows Server 2025 đã cài sẵn OpenSSH; chỉ cần bật dịch vụ.
Cài thành phần
Xem trạng thái hiện tại:
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
Cài Client, Server hoặc cả hai theo nhu cầu:
# Cài OpenSSH Client
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
# Cài OpenSSH Server
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Mỗi lệnh thành công in Online : True. Nếu RestartNeeded là True, khởi động lại máy.
Bật dịch vụ sshd
Chỉ cần khi cài OpenSSH Server:
# Chạy dịch vụ sshd
Start-Service sshd
# Tùy chọn nhưng nên làm: tự chạy cùng Windows
Set-Service -Name sshd -StartupType 'Automatic'
# Kiểm tra rule tường lửa; setup thường đã tạo sẵn
if (!(Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue)) {
Write-Output "Firewall Rule 'OpenSSH-Server-In-TCP' does not exist, creating it..."
New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
} else {
Write-Output "Firewall rule 'OpenSSH-Server-In-TCP' has been created and exists."
}
Rule OpenSSH-Server-In-TCP mở cổng 22 cho kết nối đến. Nếu rule tắt hoặc cổng không mở,
kết nối bị từ chối hoặc bị reset. Chỉ mở cổng này trên máy thật sự cần nhận SSH và giới hạn
phạm vi mạng của rule khi có thể.
Kết nối tới OpenSSH Server
Từ máy có OpenSSH Client, chạy trong PowerShell:
ssh domain\username@servername
Lần đầu, SSH hỏi có tin khóa của máy chủ không. Đối chiếu fingerprint với máy chủ trước khi
gõ yes; lựa chọn này ghi máy chủ vào danh sách known hosts. Sau đó nhập mật khẩu, ký tự
không hiển thị khi gõ. Kết nối thành công sẽ thấy dấu nhắc dạng
domain\username@SERVERNAME C:\Users\username>.
Kiểm tra sau cài
ssh -V
Get-Service sshd
Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP"
Cấu hình máy chủ nằm ở %ProgramData%\ssh\sshd_config; sau khi sửa, chạy
Restart-Service sshd.
Gỡ OpenSSH
Stop-Service sshd
Set-Service -Name sshd -StartupType 'Disabled'
Remove-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
Remove-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Nếu dịch vụ đang được dùng lúc gỡ, khởi động lại Windows. Rule tường lửa còn lại có thể
xóa bằng Remove-NetFirewallRule -Name 'OpenSSH-Server-In-TCP'.
Xử lý lỗi SSH
| Hiện tượng | Kiểm tra |
|---|---|
Connection refused | Get-Service sshd phải là Running; kiểm rule tường lửa cổng 22 |
Connection timed out | Kiểm địa chỉ, định tuyến mạng và tường lửa giữa hai máy |
Không tìm thấy lệnh ssh | Cài OpenSSH Client, rồi mở PowerShell mới để nạp lại PATH |
Dịch vụ sshd không khởi động | Xem Event Viewer, mục Applications and Services Logs → OpenSSH |
4. Tải file bằng wget
Cài bằng Chocolatey, trong PowerShell quyền quản trị. Gọi wget.exe thay vì wget: trong
Windows PowerShell 5.1, wget là alias của Invoke-WebRequest nên không nhận các tùy chọn
của GNU Wget.
choco install wget
wget.exe --version
Ví dụ tải một file, thử lại tối đa 10 lần và ghi log vào file riêng:
wget.exe --tries=10 --output-file=download.log https://example.com/archive.zip
--tries mặc định là 20 lần; lỗi không thể khắc phục như connection refused hoặc 404
không được thử lại. Trong cùng một lần chạy, Wget tự nối tiếp khi mất kết nối giữa chừng.
Dùng --continue chỉ khi muốn hoàn tất file tải dở từ lần chạy trước; server phải hỗ trợ
header Range. Nếu file trên server đã bị đổi chứ không chỉ nối thêm, kết quả sẽ hỏng,
nên tải lại từ đầu.
Tải đệ quy (--recursive) tạo nhiều request tới máy chủ của người khác; chỉ dùng khi được
phép. Độ sâu mặc định là 5 và --level=0 nghĩa là không giới hạn, không phải chỉ tải một
trang. Muốn tải một vài trang, liệt kê từng URL và bỏ --recursive. Xem đầy đủ tùy chọn
trong sổ tay GNU Wget.
5. Dùng Ansible qua WSL
Windows không chạy được Ansible control node trực tiếp; cách được hỗ trợ là chạy trong một bản phân phối Linux của Windows Subsystem for Linux (WSL). Máy Windows vẫn có thể là máy được Ansible quản lý. Xem hướng dẫn cài Ansible cho phiên bản Python tương thích với từng bản Ansible.
Cài WSL từ PowerShell quyền quản trị, khởi động lại khi được yêu cầu, rồi mở bản phân phối Linux vừa cài:
wsl --install
Trong terminal của WSL, cài pipx rồi cài Ansible. Cách này giữ Ansible trong môi trường
riêng, không đụng gói Python của hệ thống:
sudo apt update
sudo apt install -y pipx
pipx ensurepath
pipx install --include-deps ansible
Mở lại terminal WSL để nạp PATH. Quản lý máy Windows qua WinRM cần thêm thư viện pywinrm
trong cùng môi trường:
pipx inject ansible pywinrm
Tự hoàn thành lệnh Ansible
pipx install argcomplete
activate-global-python-argcomplete --user
Mở shell mới để nạp cấu hình hoàn thành lệnh.
Kiểm tra và bảo trì
ansible --version
ansible localhost -m ping
pipx upgrade --include-injected ansible
Không thay sleep hoặc binary hệ thống khác trong WSL để “sửa” timeout. Nếu Ansible báo
timeout, kiểm tra mạng, DNS và thời gian của WSL trước, rồi cập nhật WSL bằng
wsl --update từ PowerShell.