家庭網絡管理 · 踩坑實錄

家庭網絡管理:NAS + 遠控電腦
完全小白指南

QNAP NAS 連線、SSH 遠程管理、WinRM 遠控 Windows 電腦
六個真實踩坑紀錄 + 詳細解決步驟,小白也能看懂

📚 技術名詞解釋
本節用到的名詞
NAS
Network Attached Storage(網路附接儲存)
家裡的「私人雲端硬盤」。一台接在路由器上的小電腦,24 小時開著,讓家裡所有設備都能存取裡面的文件。跟 Google Drive 一樣方便,但數據放在自己家裡。
IP 地址
Internet Protocol Address
網絡上每台設備的「門牌號碼」。家裡局域網通常是 192.168.1.xxx 這個格式。路由器是 192.168.1.1,其他設備從 .2 開始分配。
局域網 LAN
Local Area Network(本地區域網絡)
家裡或辦公室內部的小型網絡。所有接在同一個路由器的設備(電腦、手機、NAS)都在同一個局域網,可以互相通信。
SSH
Secure Shell(安全外殼協議)
一種加密的遠程命令連接方式。就像「遠程打開對方電腦的命令行窗口」,你在自己電腦打命令,效果在對方設備上執行。全程加密,很安全。
paramiko
Python SSH Library
Python 語言的 SSH 連接庫。讓 Claude 可以用 Python 代碼連上 NAS 的 SSH,執行命令,取得結果。
GCP SM
Google Cloud Platform Secret Manager(谷歌雲端密碼管理器)
把密碼加密存放在谷歌雲端。Claude 要用密碼時才去取,不會把密碼明文存在電腦上。就像「雲端保險箱」。
RSA
Rivest-Shamir-Adleman(非對稱加密算法)
需要一把「公鑰」加密、一把「私鑰」解密的加密方式。QNAP 新版用這個加密登入密碼,必須在瀏覽器用 JavaScript 操作,Python 直接發明文密碼是不行的。
用一個比喻理解 NAS + 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 後台登入頁。
發現後確認機器資訊:
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 用標準密碼認證,簡單直接,而且能做的事情更多。
在 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)。
NAS 連線資訊
IP 地址192.168.1.239
SSH 端口22
登入帳號admin
密碼保管GCP SM: qnap-home-nas-admin-password
NAS 型號QNAP TS-451+
系統版本QTS 5.1.8.2823
🔐 踩坑紀錄
⚠️ 坑一:QNAP Web API 登入全部失敗
現象:試了 10+ 種密碼加密方式(plain / MD5 / SHA-256 / Base64 / MD5+時間戳 / MD5+cuid),全部回傳 authPassed=0
根本原因:新版 QNAP(QTS 5.x)登入頁面用 RSA 非對稱加密。密碼必須用瀏覽器 JavaScript 取得 RSA 公鑰再加密,Python 無法複製這個流程。
解決方案:完全放棄 Web API,改用 SSH。SSH 支援標準密碼登入,而且功能更強大。
⚠️ 坑二:SSH port 22 是關閉的
現象:掃描到 NAS IP 後嘗試 SSH 連線,報 Connection refused
根本原因:QNAP 預設不開啟 SSH,需要手動在後台開啟。
解決方案:Thomas 在 QNAP 後台 → 控制台 → 網路與文件服務 → Telnet/SSH → 打開「允許 SSH 連線」開關。
⚠️ 坑三:多次失敗登入被封 IP
現象:SSH 好不容易開了,突然所有 port 都變 closed,連 ping 都不回應。
根本原因: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 就像拿到了「倉庫的萬能鑰匙」。你可以進去翻看每個架子、移動箱子、新增貨架、查看庫存,也可以管理有哪些員工(用戶)、他們能進哪些區域(權限)。
文件管理
列出文件夾和文件
新建文件夾
刪除文件或文件夾
移動/重命名
查看文件大小和日期
讀取/寫入文件內容
系統資訊
查看磁盤空間使用量
查看正在運行的服務
查看系統負載
查看網絡連接
查看系統日誌
磁盤空間查詢結果:
總容量:9.5 TB(RAID 組合後的可用空間)
已用:2.4 TB,剩餘:7.1 TB
查詢命令:df -h /share/CACHEDEV1_DATA/
👥 用戶管理

NAS 上目前有 5 個帳號,可以透過 SSH 管理。

帳號用途備註
admin管理員帳號Claude 用這個 SSH 連線
thomasThomas 個人帳號日常使用
sophie家庭成員帳號
linda家庭成員帳號
jimi家庭成員帳號
guest訪客帳號預設帳號,通常停用
用戶管理命令
查詢用戶列表
# 查看所有用戶 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 無法啟動)
一個重要提醒:
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 已經內建。
WinRM port 5985
WinRM 使用的通信端口號
端口(Port)就像房子裡的不同門。Port 5985 是 WinRM 的專屬門。就像 SSH 用 port 22,HTTP 用 port 80,WinRM 用 port 5985。
TrustedHosts
受信任的遠程電腦名單
Windows 的安全機制:只允許「白名單」裡的 IP 地址遠程連接。預設是空的,需要手動把對方電腦的 IP 加進去。
PowerShell
Windows 的高級命令行工具
比 cmd(命令提示字元)更強大的 Windows 命令行。WinRM 的設定和使用都要在 PowerShell(管理員模式)裡執行。
MAC 地址
Media Access Control Address(媒體存取控制位址)
網卡的「身份證號碼」,全球唯一,不會重複,格式像 10-68-38-47-18-83。路由器用 MAC 地址來識別每台設備,可以根據 MAC 地址固定分配特定 IP。
DHCP
Dynamic Host Configuration Protocol(動態主機配置協議)
路由器自動分配 IP 的機制。每次設備連上 WiFi,路由器就用 DHCP 給它一個 IP 號碼。問題是每次重啟可能拿到不同的號碼,所以我們需要「保留 IP」讓 IP 固定。
Invoke-Command
PowerShell 遠程執行命令
PowerShell 的指令,讓你「從這台電腦執行那台電腦上的命令」。WinRM 設好後,就用這個命令遠控媽媽電腦。
用比喻理解 WinRM:
把媽媽電腦想成一個「大倉庫」,有個「對講機系統」(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 手動操作。
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。
媽媽電腦基本資訊
電腦型號HP laptop(機器名 HP-MOM)
系統Windows 10 家庭版
固定 IP192.168.1.214
MAC 地址10-68-38-47-18-83
登入帳號mom
密碼(空密碼,沒有設密碼)
🔧 在媽媽電腦開啟 WinRM(完整步驟)

以下所有步驟都要在媽媽電腦上執行,用管理員身份開啟 PowerShell。

開啟 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" }
測試成功!
執行後返回:hp-mom\momHP-MOM
證明 WinRM 連線完全正常,可以遠程在媽媽電腦執行任何命令了。
⚠️ 踩坑紀錄(四個真實遇到的坑)
⚠️ 坑一:空密碼被拒絕 — Access Denied
現象:WinRM 設好了,嘗試連線卻報「拒絕訪問」(Access Denied)。
根本原因: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 Get-NetConnectionProfile | Set-NetConnectionProfile -NetworkCategory Private Enable-PSRemoting -Force
⚠️ 坑三:WinRM 無法完成身份驗證
現象:連接時報「WinRM 客戶端無法處理該請求。找不到用於 192.168.1.214 的驗證目標」。
根本原因: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 再去連媽媽電腦,繞過這個問題。
最終成功 — 測試結果
WinRM 遠控媽媽電腦成功!

執行 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)。