Claude Code OAuth 網址複製不了怎麼辦:SSH 顯示 Sent via OSC 52,Mac 剪貼簿卻是空的
Claude Code OAuth 網址複製不了,可能是全螢幕介面透過 OSC 52 送剪貼簿,終端機沒收到。把 tui 設成 default 改回傳統介面就能自己選取;授權後連不回 localhost 是另一個問題。
本文目錄
在 Mac 的 Terminal 用 SSH 連到 Linux 主機,在主機上跑 Claude Code,再用 /mcp 替一個需要 OAuth 的 MCP 伺服器登入。Claude Code 印出一段很長的授權網址,下面寫著 Sent via OSC 52,可是 Mac 的剪貼簿什麼都沒有,網址又折成好幾行,用滑鼠選也選不起來。2026 年 10 月,我在 Oracle Cloud 的 VM 上透過 SSH 跑 Claude Code,替 Supabase MCP 登入(/mcp → Authenticate)時,就卡在這個 Claude Code OAuth 網址複製的問題。下面的 tui 設定和 callback 的處理跟是哪一個 MCP 無關,用 OAuth 登入的 MCP 都適用。
先說結論:在執行 Claude Code 的遠端使用者的 ~/.claude/settings.json 加入 "tui": "default",重新啟動 Claude Code,我原本複製不了的 OAuth 網址就能正常複製了。 tui 是官方文件列出的設定,default 代表改回傳統介面(在 Claude Code 裡執行 /tui default 也會寫入同一個設定)。授權完成後瀏覽器連不回 localhost,則是另一個問題,要靠貼回 callback 網址或 SSH 連接埠轉送處理。
本文是我 2026 年 10 月在 Oracle Cloud 的 Ubuntu 主機上、從 macOS 的 Terminal 透過 SSH 操作時的紀錄,加上 Claude Code 官方文件、Claude Code changelog、xterm 與 OpenSSH 文件的整理(2026 年 10 月 14 日查閱;當天這台主機上的 Claude Code 是 2.1.296 版)。
"tui": "default"能解決複製問題,是我在自己環境的實測結果,不保證每個 Claude Code 版本、終端機或 SSH 設定都適用。文中的 MCP 名稱、使用者和連接埠都是範例;真實的授權網址、callback 網址、授權碼和 token 都不要貼給別人。
Claude Code OAuth 網址複製不了:先分清楚是哪一種問題
我當時看到的畫面大致是這樣(網址省略):
Authenticating with my-server...
If your browser doesn't open automatically, copy this URL manually
(Sent via OSC 52 · select the URL manually if paste fails)
https://example.com/oauth/authorize?...
這裡其實是兩個問題,常被混在一起,處理方式完全不同:
| 卡在哪裡 | 看到的狀況 | 要處理的是 |
|---|---|---|
| 複製網址 | 顯示 Sent via OSC 52,Mac 貼上是空的;網址跨好幾行,選不起來 |
終端機介面和剪貼簿,見下面兩節 |
| 授權後回呼 | 網址已經在瀏覽器打開、也按了同意,最後瀏覽器連不到 localhost:<連接埠>/callback |
OAuth callback 的網路路徑,見後面的 callback 一節 |
我一開始先設了 SSH 連接埠轉送,結果網址還是複製不了。連接埠轉送處理的是 callback 的網路路徑,不會把東西放進剪貼簿。
為什麼顯示 Sent via OSC 52,剪貼簿卻是空的
OSC 52 是終端機的一組控制碼。依 xterm 的控制碼規格,程式把要複製的內容用 base64 編碼後送給終端機,由終端機寫進剪貼簿;終端機也可以把這個功能關掉。也就是說,遠端的 Claude Code 只負責「送出」,剪貼簿有沒有收到,要看你本機的終端機。
Claude Code 官方的全螢幕介面文件寫到幾件和這個問題有關的事:
- 全螢幕介面(fullscreen rendering)會接管滑鼠,終端機原本的「拖曳選取、複製」改由 Claude Code 自己處理。
- 本機執行時,Claude Code 用系統工具寫剪貼簿(macOS 是
pbcopy);透過 SSH 時改用 OSC 52。 - 有些終端機預設擋掉 OSC 52,例如 iTerm2 要先開啟設定才會允許。
- 沒有設定
tui時,Claude Code 依一張規則表決定用哪一種介面;例如會向 Anthropic 取得功能旗標、而且在 2026 年 5 月 6 日以後才第一次使用 Claude Code 的人,預設就是全螢幕介面。
macOS 的 Terminal 支不支援 OSC 52,我沒有找到 Apple 的官方說明。我能確定的是自己看到的結果:畫面說已經用 OSC 52 送出,Mac 剪貼簿卻沒有收到。 改回傳統介面之後,選取交還給終端機自己處理,我就能直接選取、複製網址。這個因果是我依官方文件的推論,官方沒有針對這個情境寫明。
解法:把 tui 設成 default,改回傳統介面
Claude Code 設定參考對 tui 的說明是:選擇終端機介面的畫法,值只有兩個。依 Claude Code changelog,/tui 指令和 tui 設定在 2.1.110 版加入。
tui 的值 |
意思 |
|---|---|
"fullscreen" |
全螢幕介面:不閃爍、支援滑鼠,選取由 Claude Code 處理 |
"default" |
傳統介面:對話留在終端機原本的捲動紀錄裡 |
| 沒有設定 | 由 Claude Code 依官方規則自己選 |
以下步驟都在實際執行 Claude Code 的那個 Linux 使用者底下做,不是管理員帳號。用 sudo -iu 切換使用者的話,先用 whoami 確認。
最簡單的做法:在 Claude Code 裡執行 /tui default
官方文件說明,/tui default 會切回傳統介面並寫入 tui 設定,對話內容會保留。執行 /tui 不加參數,可以看目前用的是哪一種介面。
我實際用的做法:備份後只改 tui 這個欄位
我是直接改設定檔。~/.claude/settings.json 裡如果已經有權限之類的其他設定,不要整個覆寫。下面這段只新增或更新 tui,改之前先備份:
python3 - <<'PY'
import json
import shutil
from datetime import datetime
from pathlib import Path
p = Path.home() / '.claude/settings.json'
p.parent.mkdir(parents=True, exist_ok=True)
data = json.loads(p.read_text()) if p.exists() else {}
if p.exists():
backup = p.with_name(f'settings.json.bak-{datetime.now():%Y%m%d-%H%M%S}')
shutil.copy2(p, backup)
print('Backup:', backup)
data['tui'] = 'default'
p.write_text(json.dumps(data, indent=2, ensure_ascii=False) + '\n')
print('Updated:', p)
PY
確認檔案還是合法的 JSON,並讀出 tui 的值:
python3 -m json.tool ~/.claude/settings.json >/dev/null && \
python3 -c 'import json,pathlib; print(json.loads((pathlib.Path.home()/".claude/settings.json").read_text()).get("tui"))'
預期輸出是 default。
重新啟動 Claude Code,再登入一次
在互動中的 Claude Code 輸入 /exit,再執行 claude 重新啟動。進入 /mcp,選要登入的伺服器,按 Authenticate,讓它產生新的授權網址,再試一次複製。
我只重新開了終端機裡的 Claude Code,沒有為了這件事重啟 systemd 常駐的 Remote Control 服務。
不改設定的其他做法
下面幾種做法來自官方文件或工具文件,我沒有每一種都實測過:
| 做法 | 適合 | 出處 |
|---|---|---|
在 Terminal 按住 Fn 拖曳選取 |
偶爾一次,想保留全螢幕介面 | Claude Code 全螢幕介面文件:按住這個鍵,選取交給終端機處理,Cmd+C 可以用(iTerm2 是 Option) |
啟動時加 CLAUDE_CODE_DISABLE_ALTERNATE_SCREEN=1 |
只有這一次用傳統介面 | Claude Code 設定參考:這個環境變數在單次 session 優先於 tui 設定 |
| 改用 iTerm2,開啟允許程式存取剪貼簿 | 想讓 OSC 52 正常運作 | Claude Code 文件:Settings → General → Selection → Applications in terminal may access clipboard,在 iTerm2 執行 /terminal-setup 會替你開啟 |
在 shell 執行 claude mcp login <名稱> |
不想在 /mcp 畫面裡處理 |
Claude Code MCP 文件:偵測到沒有本機瀏覽器(例如 SSH)時直接印出授權網址,再把瀏覽器的完整 redirect 網址貼回來;要用 ssh -t 連線,--no-browser 可強制使用這個流程 |
如果在 tmux 裡執行 Claude Code,tmux 也會經手剪貼簿控制碼。依 tmux 手冊,set-clipboard 設成 off 時,tmux 不接受也不轉送這個控制碼。不過外層終端機本身不支援 OSC 52 的話,改 tmux 設定也沒用。
授權後連不回 localhost:callback 要另外處理
網址成功複製、在 Mac 的瀏覽器打開也按了同意之後,OAuth 會把瀏覽器導回 http://localhost:<連接埠>/callback。這個 localhost 指的是 Mac 自己,Claude Code 卻在 VM 上等,所以瀏覽器可能顯示連線失敗。
Claude Code 的 MCP 文件寫了兩件事:
- callback 連接埠預設是隨機挑一個可用的;要固定的話,加伺服器時用
--callback-port。 - 瀏覽器導回失敗時,把網址列上完整的 callback 網址貼進 Claude Code 出現的網址欄位。
我那次也在 Mac 另開一個終端機,依畫面上 redirect_uri 的連接埠建立 SSH 轉送,例如:
ssh -N -L 57038:127.0.0.1:57038 my-vm
57038 只是範例,每次登入的連接埠可能不同,要以當次 redirect_uri 為準;my-vm 換成你 SSH 設定裡的主機名稱。依 OpenSSH 手冊,-L 把本機的連接埠轉到遠端,-N 表示不執行遠端指令,所以這行執行後會停在那裡、不出現提示符號,這是正常的。
在 Claude Code 的網址欄位,要貼上瀏覽器網址列的完整 callback 網址,不要在欄位裡按複製的快捷鍵。
怎麼還原
改回去有兩種方式:
- 在 Claude Code 裡執行
/tui fullscreen,切回全螢幕介面。 - 從設定檔刪掉
tui欄位、保留其他設定,讓 Claude Code 自己選:
python3 - <<'PY'
import json
from pathlib import Path
p = Path.home() / '.claude/settings.json'
data = json.loads(p.read_text())
data.pop('tui', None)
p.write_text(json.dumps(data, indent=2, ensure_ascii=False) + '\n')
print('Removed tui from', p)
PY
改完一樣要重新啟動 Claude Code。前面備份的 settings.json.bak-日期時間 也可以直接拿來還原整個檔案。
改之前要知道的事
- 這是使用者層級的設定:
~/.claude/settings.json會影響這個 Linux 使用者之後啟動的所有 Claude Code,不只眼前這個專案。依官方文件,從 agent view 或claude attach開的背景 session 一律用全螢幕介面,不受tui影響。 - 它只改介面:
tui和 MCP 的授權、權限或連到哪個帳號都無關。登入成功後,執行會寫入資料的操作之前,還是要確認 MCP 實際連到的是哪個帳號、哪個專案。 - 不要公開授權相關的網址:授權網址、callback 網址、授權碼和 token 都不要貼到聊天、issue 或截圖裡。
主機怎麼架、Remote Control 怎麼做成常駐服務,見〈Oracle Cloud 架 Claude Code Remote Control 常駐教學〉;同一台主機的其他錯誤,見〈Remote Control exit code 1〉〈systemctl –user No medium found〉〈Claude Code ARM64 安裝〉。剛開始用 Claude Code 的話,可以先看〈Claude Code 繁中入門〉;整個系列在 AI 創業主題頁。
常見問題
Claude Code 顯示 Sent via OSC 52,為什麼剪貼簿沒有東西?
OSC 52 是終端機的剪貼簿控制碼,要你本機的終端機支援並允許,才會把內容寫進剪貼簿。Claude Code 官方文件寫明,透過 SSH 時複製會改用 OSC 52,而且有些終端機預設擋掉它。我在 macOS 的 Terminal 透過 SSH 遇到的情況是畫面說已送出,Mac 剪貼簿卻是空的。
settings.json 裡的 tui 是什麼設定?
tui 是 Claude Code 官方文件列出的設定,用來選擇終端機介面的畫法:fullscreen 是全螢幕介面,default 是傳統介面。在 Claude Code 裡執行 /tui default 或 /tui fullscreen 會替你寫入這個設定;changelog 寫明它在 2.1.110 版加入。
把 tui 設成 default 一定能複製 OAuth 網址嗎?
不保證。這是我在自己的環境實測有效的做法:在遠端使用者的 settings.json 加入 tui: default,重新啟動 Claude Code 後,原本複製不了的 OAuth 網址就能正常複製。換成其他 Claude Code 版本、終端機或 SSH 設定,要自己測試。
OAuth 授權後瀏覽器連不到 localhost 怎麼辦?
這和複製網址是兩個問題。官方文件的做法是把瀏覽器網址列上完整的 callback 網址,貼回 Claude Code 出現的網址欄位;也可以在 Mac 另開一個終端機,用 ssh -L 把當次 redirect_uri 的連接埠轉到 VM。連接埠每次可能不同,要看當次畫面。
連 Supabase MCP 也適用嗎?
適用。我就是在 Oracle Cloud 的 VM 上透過 SSH 替 Supabase MCP 登入(/mcp → Authenticate)時遇到這個問題。tui 設定和 callback 的處理跟是哪一個 MCP 無關,其他用 OAuth 登入的 MCP 也一樣。tui 只改介面;登入成功後,執行會寫入資料的操作之前,還是要確認 MCP 實際連到的是哪個帳號、哪個專案。
改了 tui 之後想恢復全螢幕介面怎麼做?
在 Claude Code 裡執行 /tui fullscreen,或從 settings.json 刪掉 tui 這個欄位、保留其他設定,再重新啟動 Claude Code。刪掉欄位後,Claude Code 會依官方文件的規則自己選介面。
延伸閱讀
- Claude Code 繁中入門:安裝、CLAUDE.md、skills、hooks 與權限,看不懂程式也能上手Claude Code 教學:需要 Pro、Max 等付費方案,免費方案不能用;裝好先設定 CLAUDE.md 和權限,指令用到再學。另整理三種安裝方式、skills、hooks、MCP 與常見的坑。
- CLAUDE.md 怎麼寫?一個多語內容網站的實際規則與寫法CLAUDE.md 怎麼寫:寫每次對話都要記得的事,包括指令、專案結構、不能違反的規則和何時先問人。附 Anthropic 官方重點、Jason Finance 實例與可複製範本。
- 看不懂程式也能架網站:我用 Claude Code + GitHub + Cloudflare 低成本架 Jason Finance 的方法與成本Claude Code 架網站:主機和資料庫可以全用免費方案,固定支出主要是網域和 Claude 訂閱。整理 Jason Finance 用 GitHub、Cloudflare、Supabase 的架構、費用與限制。

留言
使用 Google 登入即可留言。留言「不會」使用您的 Google 頭像或姓名,對外顯示的暱稱是系統隨機產生的代號,以保護您的隱私。
登入即表示你同意本站的隱私權政策。