📚 技術名詞解釋
本節用到的名詞
NAS
Network Attached Storage(網路附接儲存)
家裡的「私人雲端硬盤」。一台接在路由器上的小電腦,24 小時開著,讓家裡所有設備都能存取裡面的文件。跟 Google Drive 一樣方便,但數據放在自己家裡。
家裡的「私人雲端硬盤」。一台接在路由器上的小電腦,24 小時開著,讓家裡所有設備都能存取裡面的文件。跟 Google Drive 一樣方便,但數據放在自己家裡。
IP 地址
Internet Protocol Address
網絡上每台設備的「門牌號碼」。家裡局域網通常是 192.168.1.xxx 這個格式。路由器是 192.168.1.1,其他設備從 .2 開始分配。
網絡上每台設備的「門牌號碼」。家裡局域網通常是 192.168.1.xxx 這個格式。路由器是 192.168.1.1,其他設備從 .2 開始分配。
局域網 LAN
Local Area Network(本地區域網絡)
家裡或辦公室內部的小型網絡。所有接在同一個路由器的設備(電腦、手機、NAS)都在同一個局域網,可以互相通信。
家裡或辦公室內部的小型網絡。所有接在同一個路由器的設備(電腦、手機、NAS)都在同一個局域網,可以互相通信。
SSH
Secure Shell(安全外殼協議)
一種加密的遠程命令連接方式。就像「遠程打開對方電腦的命令行窗口」,你在自己電腦打命令,效果在對方設備上執行。全程加密,很安全。
一種加密的遠程命令連接方式。就像「遠程打開對方電腦的命令行窗口」,你在自己電腦打命令,效果在對方設備上執行。全程加密,很安全。
paramiko
Python SSH Library
Python 語言的 SSH 連接庫。讓 Claude 可以用 Python 代碼連上 NAS 的 SSH,執行命令,取得結果。
Python 語言的 SSH 連接庫。讓 Claude 可以用 Python 代碼連上 NAS 的 SSH,執行命令,取得結果。
GCP SM
Google Cloud Platform Secret Manager(谷歌雲端密碼管理器)
把密碼加密存放在谷歌雲端。Claude 要用密碼時才去取,不會把密碼明文存在電腦上。就像「雲端保險箱」。
把密碼加密存放在谷歌雲端。Claude 要用密碼時才去取,不會把密碼明文存在電腦上。就像「雲端保險箱」。
RSA
Rivest-Shamir-Adleman(非對稱加密算法)
需要一把「公鑰」加密、一把「私鑰」解密的加密方式。QNAP 新版用這個加密登入密碼,必須在瀏覽器用 JavaScript 操作,Python 直接發明文密碼是不行的。
需要一把「公鑰」加密、一把「私鑰」解密的加密方式。QNAP 新版用這個加密登入密碼,必須在瀏覽器用 JavaScript 操作,Python 直接發明文密碼是不行的。
用一個比喻理解 NAS + SSH
把 NAS 想成家裡的「管理員辦公室」,裡面有所有文件。
SSH 就是你的「萬能鑰匙」——打開這扇門後,你可以從任何地方(包括讓 Claude 遠程)進去管理文件、查看用戶、修改設置。
QNAP 網頁後台 = 辦公室的「服務台觸控屏」,好看但需要特殊步驟登入;SSH = 後門,直接用命令控制,更靈活。
把 NAS 想成家裡的「管理員辦公室」,裡面有所有文件。
SSH 就是你的「萬能鑰匙」——打開這扇門後,你可以從任何地方(包括讓 Claude 遠程)進去管理文件、查看用戶、修改設置。
QNAP 網頁後台 = 辦公室的「服務台觸控屏」,好看但需要特殊步驟登入;SSH = 後門,直接用命令控制,更靈活。
🔍 步驟一:在局域網找到 NAS
NAS 插上路由器就會自動獲得一個 IP 地址。問題是,你不知道它被分配到哪個號碼。我們用「掃描整個局域網」的方法找到它。
Python 掃描局域網腳本
Python 掃描代碼(讓 Claude 幫你跑)
import subprocess, concurrent.futures
def ping_host(ip):
result = subprocess.run(
['ping', '-n', '1', '-w', '300', ip],
capture_output=True, text=True
)
if 'TTL=' in result.stdout:
return ip
return None
ips = [f'192.168.1.{i}' for i in range(1, 255)]
with concurrent.futures.ThreadPoolExecutor(max_workers=50) as ex:
results = list(ex.map(ping_host, ips))
online = [r for r in results if r]
print("在線設備:", online)
實際掃描結果:
在線設備:['192.168.1.1'(路由器), '192.168.1.214'(媽媽電腦), '192.168.1.239'(NAS), ...]
找到 192.168.1.239 就是 QNAP NAS。可以在瀏覽器打開 http://192.168.1.239:8080 確認是不是 QNAP 後台登入頁。
在線設備:['192.168.1.1'(路由器), '192.168.1.214'(媽媽電腦), '192.168.1.239'(NAS), ...]
找到 192.168.1.239 就是 QNAP NAS。可以在瀏覽器打開 http://192.168.1.239:8080 確認是不是 QNAP 後台登入頁。
發現後確認機器資訊:
QNAP 型號:TS-451+(4 盤位 NAS)
系統版本:QTS 5.1.8.2823
總容量:9.5 TB,已用:2.4 TB
QNAP 型號:TS-451+(4 盤位 NAS)
系統版本:QTS 5.1.8.2823
總容量:9.5 TB,已用:2.4 TB
🔐 步驟二:理解 SSH 並開啟它
為什麼選 SSH,不用 QNAP 網頁 API?
嘗試過用 Python 調用 QNAP Web API 登入——試了 10+ 種密碼加密方式(plain / MD5 / SHA-256 / Base64 / MD5+時間戳 / MD5+cuid),全部回傳 authPassed=0。
原因:新版 QNAP 在網頁後台使用 RSA 非對稱加密,密碼必須先用瀏覽器裡的 JavaScript 取得 RSA 公鑰,再加密後發送。Python 腳本沒法複製這個過程。
解決方案:完全放棄 Web API,改用 SSH。SSH 用標準密碼認證,簡單直接,而且能做的事情更多。
嘗試過用 Python 調用 QNAP Web API 登入——試了 10+ 種密碼加密方式(plain / MD5 / SHA-256 / Base64 / MD5+時間戳 / MD5+cuid),全部回傳 authPassed=0。
原因:新版 QNAP 在網頁後台使用 RSA 非對稱加密,密碼必須先用瀏覽器裡的 JavaScript 取得 RSA 公鑰,再加密後發送。Python 腳本沒法複製這個過程。
解決方案:完全放棄 Web API,改用 SSH。SSH 用標準密碼認證,簡單直接,而且能做的事情更多。
在 QNAP 後台開啟 SSH
1
瀏覽器打開 QNAP 後台
在瀏覽器地址欄輸入
http://192.168.1.239:8080(NAS 的 IP 加 :8080 端口)。用 admin 帳號登入。2
找到 SSH 開關
進入「控制台」→「網路與文件服務」→「Telnet / SSH」。找到「允許 SSH 連線」的開關,打開它。
3
確認 port 22 開放
SSH 預設用 port 22。開啟後,Claude 就可以用 Python paramiko 庫連接了。
🔗 步驟三:用 Python SSH 連線
SSH 開啟後,Claude 用以下代碼連入 NAS,執行任何命令。密碼存放在 GCP Secret Manager,不會明文暴露。
Python paramiko SSH 連線代碼
import paramiko, subprocess
# 從 GCP Secret Manager 取密碼(不明文存放)
def get_secret(name):
r = subprocess.run(
f'gcloud secrets versions access latest --secret={name} --project=nvda-strategy',
capture_output=True, text=True, shell=True
)
return r.stdout.strip()
# 建立 SSH 連線
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(
hostname='192.168.1.239',
username='admin',
password=get_secret('qnap-home-nas-admin-password'),
timeout=10
)
# 執行命令範例:列出根目錄
stdin, stdout, stderr = ssh.exec_command('ls /share/CACHEDEV1_DATA/')
print(stdout.read().decode())
ssh.close()
連線成功! 執行後能看到 NAS 上的文件夾清單。帳號 admin,密碼已存入 GCP Secret Manager(secret:
qnap-home-nas-admin-password)。
🔐 踩坑紀錄
⚠️ 坑一:QNAP Web API 登入全部失敗
現象:試了 10+ 種密碼加密方式(plain / MD5 / SHA-256 / Base64 / MD5+時間戳 / MD5+cuid),全部回傳
根本原因:新版 QNAP(QTS 5.x)登入頁面用 RSA 非對稱加密。密碼必須用瀏覽器 JavaScript 取得 RSA 公鑰再加密,Python 無法複製這個流程。
解決方案:完全放棄 Web API,改用 SSH。SSH 支援標準密碼登入,而且功能更強大。
authPassed=0。根本原因:新版 QNAP(QTS 5.x)登入頁面用 RSA 非對稱加密。密碼必須用瀏覽器 JavaScript 取得 RSA 公鑰再加密,Python 無法複製這個流程。
解決方案:完全放棄 Web API,改用 SSH。SSH 支援標準密碼登入,而且功能更強大。
⚠️ 坑二:SSH port 22 是關閉的
現象:掃描到 NAS IP 後嘗試 SSH 連線,報
根本原因:QNAP 預設不開啟 SSH,需要手動在後台開啟。
解決方案:Thomas 在 QNAP 後台 → 控制台 → 網路與文件服務 → Telnet/SSH → 打開「允許 SSH 連線」開關。
Connection refused。根本原因:QNAP 預設不開啟 SSH,需要手動在後台開啟。
解決方案:Thomas 在 QNAP 後台 → 控制台 → 網路與文件服務 → Telnet/SSH → 打開「允許 SSH 連線」開關。
⚠️ 坑三:多次失敗登入被封 IP
現象:SSH 好不容易開了,突然所有 port 都變 closed,連 ping 都不回應。
根本原因:QNAP 的「帳號存取保護」功能:短時間多次登入失敗就封 IP。前面測試各種密碼加密方式時觸發了封鎖。
解決方案:Thomas 在 QNAP 後台 → 控制台 → 系統 → 安全 → 帳號存取保護 → 找到被封的 IP → 解除封鎖。
根本原因:QNAP 的「帳號存取保護」功能:短時間多次登入失敗就封 IP。前面測試各種密碼加密方式時觸發了封鎖。
解決方案:Thomas 在 QNAP 後台 → 控制台 → 系統 → 安全 → 帳號存取保護 → 找到被封的 IP → 解除封鎖。
❓ FAQ
問:為什麼要用 Python 連 NAS?直接在 QNAP 後台操作不行嗎?
可以手動操作,但讓 Claude 用 Python 連 SSH 的好處是:可以「說一句話做很多事」。比如說「把今天的備份文件搬到 archive 文件夾」,Claude 就直接 SSH 進去執行,不需要你開瀏覽器一步步點。
問:SSH 安全嗎?密碼會不會洩漏?
SSH 連線本身是加密的,非常安全。密碼我們存在 GCP Secret Manager,不會出現在任何代碼文件裡。Claude 連的時候動態從 GCP 取密碼,取完即用不保存。
問:如果以後 NAS 的 IP 變了怎麼辦?
在路由器設置「DHCP 保留 IP」,用 MAC 地址綁定固定 IP 給 NAS,這樣 IP 就永遠不會變。或者在 QNAP 後台設定靜態 IP 也可以。
問:QNAP Web API 完全沒辦法用嗎?
技術上可以,但需要用 Playwright 自動化瀏覽器(讓程式模擬真實人類在瀏覽器點擊)來複製 RSA 加密的登入流程。比較複雜。對於管理任務,SSH 更簡單直接,所以我們選 SSH。
✅ 透過 SSH 能做的事(已測試確認)
用比喻來說:
SSH 登入 NAS 就像拿到了「倉庫的萬能鑰匙」。你可以進去翻看每個架子、移動箱子、新增貨架、查看庫存,也可以管理有哪些員工(用戶)、他們能進哪些區域(權限)。
SSH 登入 NAS 就像拿到了「倉庫的萬能鑰匙」。你可以進去翻看每個架子、移動箱子、新增貨架、查看庫存,也可以管理有哪些員工(用戶)、他們能進哪些區域(權限)。
文件管理
✓列出文件夾和文件
✓新建文件夾
✓刪除文件或文件夾
✓移動/重命名
✓查看文件大小和日期
✓讀取/寫入文件內容
系統資訊
✓查看磁盤空間使用量
✓查看正在運行的服務
✓查看系統負載
✓查看網絡連接
✓查看系統日誌
磁盤空間查詢結果:
總容量:9.5 TB(RAID 組合後的可用空間)
已用:2.4 TB,剩餘:7.1 TB
查詢命令:
總容量:9.5 TB(RAID 組合後的可用空間)
已用:2.4 TB,剩餘:7.1 TB
查詢命令:
df -h /share/CACHEDEV1_DATA/
👥 用戶管理
NAS 上目前有 5 個帳號,可以透過 SSH 管理。
用戶管理命令
查詢用戶列表
# 查看所有用戶
cat /etc/passwd | grep -v nologin | cut -d: -f1
QNAP 專屬用戶管理工具
# 修改密碼
/sbin/changepasswd <username>
# 新增用戶
/sbin/qadduser <username>
# 刪除用戶
/sbin/user_del <username>
🔧 可用的管理工具
文件夾權限
可以修改哪個用戶能看/寫哪個文件夾。對家庭使用很有用,比如「只有 thomas 能看財務文件夾」。
# 查看文件夾權限
ls -la /share/CACHEDEV1_DATA/
# 修改擁有者
chown -R thomas:thomas /share/...
磁盤監控
可以定期查詢空間使用量,快滿的時候提醒。也可以查看各個磁盤的健康狀態。
# 磁盤空間
df -h
# 磁盤健康
/sbin/qpkg_cli --status
❌ 不能做的事(或不建議這樣做)
以下操作 SSH 做不到或有風險:
❌ 修改 QNAP 圖形界面設定(需要 Web API 或手動操作)
❌ 管理 QNAP 應用程式套件(App Center 的安裝/更新)
❌ 修改 RAID 配置(高風險!誤操作可能丟失所有數據)
❌ 在 NAS 上運行大型計算任務(NAS 不是設計來跑程式的,會影響性能)
❌ 不建議直接刪除 /etc/ 下的系統文件(可能導致 NAS 無法啟動)
❌ 修改 QNAP 圖形界面設定(需要 Web API 或手動操作)
❌ 管理 QNAP 應用程式套件(App Center 的安裝/更新)
❌ 修改 RAID 配置(高風險!誤操作可能丟失所有數據)
❌ 在 NAS 上運行大型計算任務(NAS 不是設計來跑程式的,會影響性能)
❌ 不建議直接刪除 /etc/ 下的系統文件(可能導致 NAS 無法啟動)
一個重要提醒:
NAS 的主要用途是「儲存」,不是「計算」。如果需要讓 Claude 做大量文件處理,建議把文件拉到電腦上處理完再放回 NAS,而不是直接在 NAS 上跑腳本。
NAS 的主要用途是「儲存」,不是「計算」。如果需要讓 Claude 做大量文件處理,建議把文件拉到電腦上處理完再放回 NAS,而不是直接在 NAS 上跑腳本。
❓ FAQ
問:NAS 可以讓 Claude 自動備份電腦文件嗎?
可以!可以設定定期讓 Claude 把電腦上的重要文件(比如工作文檔、Claude 記憶文件)壓縮後上傳到 NAS 的指定文件夾。比只存在電腦本地更安全。
問:家庭成員可以用手機或平板連 NAS 嗎?
可以!QNAP 有官方 App「Qfile」,ios 和 Android 都有。連同一個 WiFi 就能直接存取 NAS 上的文件。也可以設定外網訪問(但需要設定 DDNS,比較複雜)。
問:9.5 TB 的空間不夠用了怎麼辦?
QNAP TS-451+ 是 4 盤位 NAS,可以更換成更大容量的硬盤,或者增加第三、第四塊盤。不需要重新設置,QNAP 後台可以擴容。
📚 技術名詞解釋
本節用到的名詞
WinRM
Windows Remote Management(Windows 遠程管理)
Windows 系統內建的遠程控制功能。讓你從另一台電腦輸入命令,在目標電腦上執行。跟 SSH 對 Linux 的作用一樣。不需要安裝任何軟件,Windows 已經內建。
Windows 系統內建的遠程控制功能。讓你從另一台電腦輸入命令,在目標電腦上執行。跟 SSH 對 Linux 的作用一樣。不需要安裝任何軟件,Windows 已經內建。
WinRM port 5985
WinRM 使用的通信端口號
端口(Port)就像房子裡的不同門。Port 5985 是 WinRM 的專屬門。就像 SSH 用 port 22,HTTP 用 port 80,WinRM 用 port 5985。
端口(Port)就像房子裡的不同門。Port 5985 是 WinRM 的專屬門。就像 SSH 用 port 22,HTTP 用 port 80,WinRM 用 port 5985。
TrustedHosts
受信任的遠程電腦名單
Windows 的安全機制:只允許「白名單」裡的 IP 地址遠程連接。預設是空的,需要手動把對方電腦的 IP 加進去。
Windows 的安全機制:只允許「白名單」裡的 IP 地址遠程連接。預設是空的,需要手動把對方電腦的 IP 加進去。
PowerShell
Windows 的高級命令行工具
比 cmd(命令提示字元)更強大的 Windows 命令行。WinRM 的設定和使用都要在 PowerShell(管理員模式)裡執行。
比 cmd(命令提示字元)更強大的 Windows 命令行。WinRM 的設定和使用都要在 PowerShell(管理員模式)裡執行。
MAC 地址
Media Access Control Address(媒體存取控制位址)
網卡的「身份證號碼」,全球唯一,不會重複,格式像 10-68-38-47-18-83。路由器用 MAC 地址來識別每台設備,可以根據 MAC 地址固定分配特定 IP。
網卡的「身份證號碼」,全球唯一,不會重複,格式像 10-68-38-47-18-83。路由器用 MAC 地址來識別每台設備,可以根據 MAC 地址固定分配特定 IP。
DHCP
Dynamic Host Configuration Protocol(動態主機配置協議)
路由器自動分配 IP 的機制。每次設備連上 WiFi,路由器就用 DHCP 給它一個 IP 號碼。問題是每次重啟可能拿到不同的號碼,所以我們需要「保留 IP」讓 IP 固定。
路由器自動分配 IP 的機制。每次設備連上 WiFi,路由器就用 DHCP 給它一個 IP 號碼。問題是每次重啟可能拿到不同的號碼,所以我們需要「保留 IP」讓 IP 固定。
Invoke-Command
PowerShell 遠程執行命令
PowerShell 的指令,讓你「從這台電腦執行那台電腦上的命令」。WinRM 設好後,就用這個命令遠控媽媽電腦。
PowerShell 的指令,讓你「從這台電腦執行那台電腦上的命令」。WinRM 設好後,就用這個命令遠控媽媽電腦。
用比喻理解 WinRM:
把媽媽電腦想成一個「大倉庫」,有個「對講機系統」(WinRM)但預設是關閉的、連電都沒插。
設定 WinRM 的過程:先插電(Enable-PSRemoting)→ 把對講機頻道設為「家庭內部頻道」(網絡類型改 Private)→ 把 Thomas 電腦的對講機號碼加入白名單(TrustedHosts)→ 允許空密碼(因為媽媽帳號沒有設密碼)。
全部搞定後,Thomas 就可以對著自己的對講機說命令,媽媽電腦那邊自動執行。
把媽媽電腦想成一個「大倉庫」,有個「對講機系統」(WinRM)但預設是關閉的、連電都沒插。
設定 WinRM 的過程:先插電(Enable-PSRemoting)→ 把對講機頻道設為「家庭內部頻道」(網絡類型改 Private)→ 把 Thomas 電腦的對講機號碼加入白名單(TrustedHosts)→ 允許空密碼(因為媽媽帳號沒有設密碼)。
全部搞定後,Thomas 就可以對著自己的對講機說命令,媽媽電腦那邊自動執行。
🔌 先決條件:在路由器固定媽媽電腦的 IP
WinRM 連線需要知道對方的 IP 地址。如果 IP 每次重啟都會變,就很麻煩。所以先在路由器設定「保留 IP」。
路由器資訊:TP-Link Archer 電競款,IP 192.168.1.1
TP-Link 新版韌體用 RSA 加密,Claude 無法透過 API 自動登入,需要 Thomas 手動操作。
TP-Link 新版韌體用 RSA 加密,Claude 無法透過 API 自動登入,需要 Thomas 手動操作。
1
在媽媽電腦查 MAC 地址
在媽媽電腦開命令提示字元,輸入
ipconfig /all,找到網卡的「實體位址」。ipconfig /all
# 找到類似這樣的行:
# 實體位址:10-68-38-47-18-83
2
登入路由器後台
瀏覽器打開 http://192.168.1.1,用 thomas260 登入 TP-Link 管理頁面。
3
設定保留 IP
找到「DHCP」→「保留指定 IP 位址」(或「Address Reservation」),新增一筆記錄:MAC 地址填 10-68-38-47-18-83,IP 填 192.168.1.214。
4
媽媽電腦重啟確認
重啟媽媽電腦後,確認它的 IP 變成 192.168.1.214。以後每次重啟都會是這個 IP。
🔧 在媽媽電腦開啟 WinRM(完整步驟)
以下所有步驟都要在媽媽電腦上執行,用管理員身份開啟 PowerShell。
開啟 PowerShell 管理員模式:
按 Windows 鍵 → 搜尋「PowerShell」→ 右鍵點擊 → 選「以系統管理員身分執行」→ 看到視窗標題有「管理員」字樣就對了。
按 Windows 鍵 → 搜尋「PowerShell」→ 右鍵點擊 → 選「以系統管理員身分執行」→ 看到視窗標題有「管理員」字樣就對了。
1
把網絡類型改為「私人」
WinRM 預設只在「私人」或「網域」網絡下才能開啟。家裡的 WiFi 要先確認設成「私人」。
# 在 PowerShell(管理員)執行:
Get-NetConnectionProfile | Set-NetConnectionProfile -NetworkCategory Private
2
開啟 WinRM 服務
這個命令會開啟 WinRM 服務,設定防火牆規則,讓 port 5985 可以接收連接。執行時會問幾個問題,都輸入 Y 確認。
Enable-PSRemoting -Force
3
允許空密碼遠程連接
Windows 預設禁止空密碼帳號進行遠程連接(安全考量)。因為媽媽電腦的 mom 帳號沒有設密碼,需要修改這個限制。
# 修改登錄表,允許空密碼遠程連接
Set-ItemProperty `
-Path "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" `
-Name "LimitBlankPasswordUse" `
-Value 0
以下步驟在 Thomas 自己的電腦(發起連線的那台)執行:
4
把媽媽電腦加入 TrustedHosts 白名單
在 Thomas 電腦的 PowerShell(管理員)執行。告訴自己的電腦「信任這個 IP」。
# 在 Thomas 電腦的 PowerShell(管理員)執行:
Set-Item WSMan:\localhost\Client\TrustedHosts `
-Value '192.168.1.214' -Force
5
測試連線
用 Invoke-Command 遠程在媽媽電腦執行一個命令,測試是否成功。
# 測試命令:遠程查詢電腦名稱和用戶名
$cred = New-Object System.Management.Automation.PSCredential(
"mom",
(New-Object System.Security.SecureString)
)
Invoke-Command -ComputerName '192.168.1.214' -Credential $cred -ScriptBlock {
"$env:COMPUTERNAME\$env:USERNAME"
}
測試成功!
執行後返回:
證明 WinRM 連線完全正常,可以遠程在媽媽電腦執行任何命令了。
執行後返回:
hp-mom\mom 和 HP-MOM證明 WinRM 連線完全正常,可以遠程在媽媽電腦執行任何命令了。
⚠️ 踩坑紀錄(四個真實遇到的坑)
⚠️ 坑一:空密碼被拒絕 — Access Denied
現象:WinRM 設好了,嘗試連線卻報「拒絕訪問」(Access Denied)。
根本原因:Windows 安全政策:
解決方案:在媽媽電腦執行下面命令把這個限制改為 0:
根本原因:Windows 安全政策:
LimitBlankPasswordUse = 1(預設值)表示「禁止空密碼帳號進行網絡登入」。媽媽的 mom 帳號沒有設密碼,所以被拒絕。解決方案:在媽媽電腦執行下面命令把這個限制改為 0:
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" -Name "LimitBlankPasswordUse" -Value 0
注意:或者更好的做法是給 mom 帳號設一個密碼,安全性更高。
⚠️ 坑二:Enable-PSRemoting 報錯 — 網絡是「公用」
現象:執行 Enable-PSRemoting 報錯,說「網絡連接設為公用網絡,不允許啟動」。
根本原因:WinRM 出於安全考量,在「公用網絡」(Public Network)模式下不允許遠程連接。家裡的 WiFi 如果之前是在外面連過公共 WiFi,可能被設成了「公用」。
解決方案:先把網絡類型改成「私人」,再重新執行 Enable-PSRemoting。
根本原因:WinRM 出於安全考量,在「公用網絡」(Public Network)模式下不允許遠程連接。家裡的 WiFi 如果之前是在外面連過公共 WiFi,可能被設成了「公用」。
解決方案:先把網絡類型改成「私人」,再重新執行 Enable-PSRemoting。
# 改成私人網絡後再開啟 WinRM
Get-NetConnectionProfile | Set-NetConnectionProfile -NetworkCategory Private
Enable-PSRemoting -Force
⚠️ 坑三:WinRM 無法完成身份驗證
現象:連接時報「WinRM 客戶端無法處理該請求。找不到用於 192.168.1.214 的驗證目標」。
根本原因:Thomas 的電腦還沒有把媽媽電腦的 IP 加入「受信任主機」列表(TrustedHosts)。Windows 不信任這個 IP,所以拒絕連線嘗試。
解決方案:在 Thomas 自己電腦的 PowerShell 執行:
根本原因:Thomas 的電腦還沒有把媽媽電腦的 IP 加入「受信任主機」列表(TrustedHosts)。Windows 不信任這個 IP,所以拒絕連線嘗試。
解決方案:在 Thomas 自己電腦的 PowerShell 執行:
Set-Item WSMan:\localhost\Client\TrustedHosts -Value '192.168.1.214' -Force
⚠️ 坑四:Python 連 WinRM 時認證錯誤
現象:PowerShell 能連,但 Python 用 pywinrm 庫連接時報認證失敗。
根本原因:Python pywinrm 庫的認證方式跟 PowerShell 內建的略有不同,空密碼的處理方式需要特別設定。
解決方案:改用 PowerShell 的 Invoke-Command 作為橋樑,讓 Claude 用 Python 呼叫 PowerShell 腳本,PowerShell 再去連媽媽電腦,繞過這個問題。
根本原因:Python pywinrm 庫的認證方式跟 PowerShell 內建的略有不同,空密碼的處理方式需要特別設定。
解決方案:改用 PowerShell 的 Invoke-Command 作為橋樑,讓 Claude 用 Python 呼叫 PowerShell 腳本,PowerShell 再去連媽媽電腦,繞過這個問題。
✅ 最終成功 — 測試結果
WinRM 遠控媽媽電腦成功!
執行 Invoke-Command 後收到回傳:
這證明 Thomas 的電腦可以在媽媽電腦上執行任意 PowerShell 命令,不需要人坐在那台電腦前。
執行 Invoke-Command 後收到回傳:
hp-mom\mom(帳號名)和 HP-MOM(電腦名)這證明 Thomas 的電腦可以在媽媽電腦上執行任意 PowerShell 命令,不需要人坐在那台電腦前。
現在可以做的事
✓遠程查看媽媽電腦上的文件
✓遠程啟動/關閉程序
✓遠程安裝更新
✓遠程排查問題(不用跑去她那裡)
✓讓 Claude 自動維護媽媽電腦(清理緩存、定期備份)
讓 Claude 遠控的 Python 模板
Python 呼叫 PowerShell 遠控媽媽電腦
import subprocess
def run_on_mom(command):
"""在媽媽電腦上執行 PowerShell 命令"""
ps_script = f"""
$cred = New-Object System.Management.Automation.PSCredential(
"mom",
(New-Object System.Security.SecureString)
)
Invoke-Command -ComputerName '192.168.1.214' -Credential $cred -ScriptBlock {{
{command}
}}
"""
result = subprocess.run(
['powershell', '-Command', ps_script],
capture_output=True,
text=True,
encoding='utf-8'
)
return result.stdout.strip()
# 使用範例
print(run_on_mom("Get-ChildItem C:\\Users\\mom\\Desktop"))
print(run_on_mom("$env:COMPUTERNAME"))
❓ FAQ
問:媽媽重啟電腦後,WinRM 還有效嗎?
有效!Enable-PSRemoting 設定的 WinRM 服務會隨開機自動啟動。不需要每次重啟都重新設定。IP 也是固定的(路由器 MAC 綁定),所以重啟後可以直接用。
問:這樣設定安全嗎?別人可以連進媽媽電腦嗎?
相對安全。因為只在局域網內有效(同一個 WiFi),外網的人無法透過 WinRM 連進來。但如果有人連上你家 WiFi,理論上可以。建議給 mom 帳號設一個密碼,安全性更好。
問:除了 WinRM,還有其他遠控 Windows 的方式嗎?
有幾種:①遠端桌面(RDP)— 可以看到圖形界面,但需要 Windows 10 專業版才完整支援;②TeamViewer / AnyDesk — 圖形遠控軟件,但媽媽電腦需要安裝;③WinRM — 純命令行,適合 Claude 自動化操作,不需要裝任何額外軟件。對於讓 Claude 自動維護,WinRM 最適合。
問:設定 TrustedHosts 後,Thomas 的電腦可以連接家裡所有電腦嗎?
目前只加了媽媽電腦的 IP(192.168.1.214)。如果還有其他電腦需要遠控,再把那台電腦的 IP 加進去:
Set-Item WSMan:\localhost\Client\TrustedHosts -Value '192.168.1.214,192.168.1.xxx' -Force(用逗號分隔多個 IP)。