Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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ượngKiểm tra
Connection refusedGet-Service sshd phải là Running; kiểm rule tường lửa cổng 22
Connection timed outKiể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 sshCài OpenSSH Client, rồi mở PowerShell mới để nạp lại PATH
Dịch vụ sshd không khởi độngXem 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.