Ubuntu避坑指南:Windows10 用 SSH 连接 Ubuntu 的配置与 TaoToken 统一 Key 接入
发布时间:2026/10/4 15:37:10 锦皓数字建站

1. Windows10 连 Ubuntu 总失败先理清 SSH 远程连接到底卡在哪很多人第一次在 Windows10 上敲ssh user192.168.x.x看到的不是登录提示而是Connection refused、Connection timed out或者 VSCode Remote-SSH 弹出一句「过程试图写入的管道不存在」。这些报错看着吓人其实九成以上都集中在四个环节Ubuntu 没装 sshd、sshd 没监听对端口、防火墙把 22 拦了、Windows 侧密钥权限不对。把这四件事按顺序排掉SSH 远程连接 Ubuntu 基本就通了。SSH 是什么一句话它是 Secure Shell一条加密通道让你在 Windows 的终端里操作 Ubuntu 的命令行也能让 VSCode、Cursor 这类编辑器把整个项目目录挂到远程机器上跑。适合谁适合在 Windows 上写代码、但需要 Linux 环境编译或跑服务的开发者也适合手里有台旧笔记本装了 Ubuntu、想当远程开发机用的人。这篇按「Ubuntu 装 sshd → 改配置 → Windows 生成密钥 → 验证连通 → 排错」的顺序走每一步都给可复制的命令和配置片段。最后再补一段远程开发工具里调用模型 API 时怎么把 Key 统一走 TaoToken 的 API 通道省得每个工具各配一套凭据。先说一个我踩过的坑Ubuntu 默认可能只装了 openssh-client没装 openssh-server。client 是让你从 Ubuntu 去连别人的server 才是让别人连进来的。只装 clientWindows 怎么连都是 refused。所以第一步永远是确认 server 在不在。另外Ubuntu 的 SSH 配置有两个容易混的文件/etc/ssh/ssh_config是客户端配置/etc/ssh/sshd_config是服务端配置。改错文件等于白改。下面会明确标出每个片段该放哪个文件。2. Ubuntu 侧 sshd 安装与 sshd_config 配置端口、密钥登录一次配好先在 Ubuntu 上把服务端装好。打开终端依次执行sudo apt-get update sudo apt-get upgrade -y sudo apt install openssh-server -y sudo apt install openssh-client -y装完确认服务状态sudo systemctl status ssh看到active (running)就对了。如果显示Unit ssh.service could not be found说明 server 没装上回到上一步重装。接下来改服务端配置。先备份再编辑sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak sudo vim /etc/ssh/sshd_config需要确认或修改的关键项如下可以直接对照# /etc/ssh/sshd_config Port 22 ListenAddress 0.0.0.0 PermitRootLogin no PubkeyAuthentication yes PasswordAuthentication yes AuthorizedKeysFile .ssh/authorized_keys几个点解释一下。Port 22是默认端口如果你改了端口Windows 侧连接命令和防火墙都要跟着改。ListenAddress 0.0.0.0表示监听所有网卡如果只写127.0.0.1那只有本机能连Windows 一定连不上。PermitRootLogin no是安全建议别用 root 直接登录用普通用户加 sudo。PasswordAuthentication yes先开着方便第一次用密码登录等密钥配通了再考虑关掉。如果你确实需要临时用 root 登录调试可以改成PermitRootLogin yes但调试完记得改回no。改完保存退出vim 里:wq然后重启服务sudo systemctl restart ssh验证监听端口sudo ss -tlnp | grep ssh正常会看到0.0.0.0:22或:::22。如果只看到127.0.0.1:22回去检查ListenAddress。防火墙这块Ubuntu 默认的 ufw 如果开着要放行 22sudo ufw status sudo ufw allow 22/tcp sudo ufw reload如果你在虚拟机里跑 Ubuntu还要确认网络模式。NAT 模式下 Windows 不能直接连虚拟机的内网 IP需要做端口转发或者把网络改成桥接模式。桥接模式下虚拟机会拿到和 Windows 同网段的 IP直接连就行。这一步很多人忽略结果 IP 看着对就是连不上。查本机 IPsudo apt install net-tools -y ifconfig -a或者用新版命令ip addr show记下inet后面那个地址比如192.168.1.50这就是 Windows 要连的目标。3. Windows 侧 config 与密钥配置一份可复制的 SSH config 示例Windows10 自带 OpenSSH 客户端。按Win R输入cmd敲ssh如果出现用法说明就说明有了。没有的话去「设置 → 应用 → 可选功能 → 添加功能 → OpenSSH 客户端」装上。先生成密钥对。在 cmd 或 PowerShell 里ssh-keygen -t ed25519 -C win10-to-ubuntu一路回车默认生成在C:\Users\你的用户名\.ssh\下得到id_ed25519私钥和id_ed25519.pub公钥。私钥留在 Windows公钥要放到 Ubuntu。把公钥内容追加到 Ubuntu 的~/.ssh/authorized_keys。可以在 Windows 上先看公钥内容type C:\Users\你的用户名\.ssh\id_ed25519.pub复制输出然后在 Ubuntu 上mkdir -p ~/.ssh chmod 700 ~/.ssh echo 粘贴你的公钥内容 ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys权限很关键。.ssh目录必须是 700authorized_keys必须是 600否则 sshd 会拒绝使用这个密钥日志里会提示Authentication refused: bad ownership or modes。然后配置 Windows 侧的 SSH config让连接更省事。文件路径是C:\Users\你的用户名\.ssh\config没有就新建Host ubuntu-dev HostName 192.168.1.50 User yourname Port 22 IdentityFile C:\Users\你的用户名\.ssh\id_ed25519 ServerAliveInterval 60 ServerAliveCountMax 3Host后面是你自己起的别名以后直接ssh ubuntu-dev就行。ServerAliveInterval 60是每 60 秒发一次心跳防止长时间不操作被断开。如果你用 VSCode 的 Remote-SSH 插件它读的也是这个 config 文件。装好插件后左侧远程资源管理器里会出现ubuntu-dev点连接即可。第一次会提示选择平台选 Linux然后输入密码如果密钥没生效或直接免密进入。这里补一句关于远程开发工具里 API 凭据统一的事。你在 Ubuntu 上跑 Cline、Continue、Codex 这类工具时模型调用需要 Base URL 和 Key。与其每个工具各配一套不如统一走 TaoToken 的 API 通道。在工具的配置里填{ baseUrl: https://taotoken.net/api, apiKey: 你的 TaoToken Key, model: claude-sonnet-4-20250514 }这样 Windows 侧和 Ubuntu 侧的工具可以复用同一套凭据换工具时只改 model 字段。Key 在 TaoToken 控制台的 API Keys 页面生成具体接入方式可以看官方文档。4. 验证 SSH 连通与成功结果从命令行到 VSCode 的完整确认配置完先别急着开编辑器用命令行验证最直接。在 Windows 的 cmd 里ssh ubuntu-dev如果一切正常会提示输入密码或直接进入然后看到 Ubuntu 的命令行提示符类似yournameubuntu:~$。这就说明 SSH 通道通了。再验证密钥登录是否生效。退出后重新连如果不再提示密码说明公钥认证成功。可以用-v看详细过程ssh -v ubuntu-dev输出里找Authentications that can continue: publickey,password和Offering public key如果最后是Authentication succeeded (publickey)就对了。连通性也可以用一条命令快速测ssh -o ConnectTimeout5 ubuntu-dev echo connected hostname whoami正常输出类似connected ubuntu yourname这说明连接、认证、远程命令执行都正常。VSCode 侧装好 Remote-SSH 后按F1输入Remote-SSH: Connect to Host选ubuntu-dev。连接成功后左下角会显示SSH: ubuntu-dev然后你可以打开远程目录比如/home/yourname/project。终端里跑uname -a确认是 Linux 内核。如果要在远程终端里调用模型 API先确认网络能通curl -s -o /dev/null -w %{http_code} https://taotoken.net/api返回 200 或 401 都说明网络可达401 是没带 Key 的正常响应。然后在你用的工具里填好 Base URL 和 Key发一条测试请求能返回模型输出就说明整条链路通了。成功的结果长这样Windows 命令行能免密登录 UbuntuVSCode 能挂载远程目录并编辑文件远程终端里的开发工具能正常调用模型 API。三件事都成立这套环境就算配好了。5. 常见报错排查Connection refused、管道不存在、401 逐个解决报错一ssh: connect to host 192.168.1.50 port 22: Connection refused这个最常见。原因通常是 Ubuntu 没装 sshd或者服务没启动。先在 Ubuntu 上sudo systemctl status ssh sudo systemctl start ssh sudo systemctl enable ssh如果服务正常但还是 refused检查ListenAddress是不是被限制成了127.0.0.1。另外虚拟机 NAT 模式下Windows 连虚拟机内网 IP 也会 refused改成桥接或做端口转发。报错二Connection timed out网络层不通。先ping 192.168.1.50ping 不通就是网络问题检查虚拟网络模式或物理网络。ping 通但 SSH 超时多半是防火墙拦了sudo ufw status sudo ufw allow 22/tcp云服务器的话还要检查安全组规则有没有放行 22 端口。报错三过程试图写入的管道不存在VSCode Remote-SSH这是 Windows 侧.ssh目录权限问题。按下面步骤修右键C:\Users\你的用户名\.ssh→ 属性 → 安全 → 高级 → 禁用继承 → 从此对象中删除所有继承的权限。然后添加你自己的用户账户给完全控制权限。确定后重启 VSCode 再连。报错四Permission denied (publickey)公钥没放对或者权限不对。在 Ubuntu 上检查ls -la ~/.ssh/ cat ~/.ssh/authorized_keys确认.ssh是 700authorized_keys是 600且公钥内容完整一行以ssh-ed25519开头。Windows 侧确认IdentityFile路径指向私钥而不是公钥。报错五API 调用返回 401 或local proxy failed如果你在远程工具里配了模型 API报 401 说明 Key 不对或没带上。检查配置里的apiKey字段是否填了 TaoToken 控制台生成的 KeybaseUrl是否是https://taotoken.net/api。local proxy failed通常是工具本地代理端口没起来重启工具或检查端口占用。报错六reading choices相关错误这类报错一般出现在流式响应解析时说明返回体格式和工具预期不一致。先确认model字段填的是 TaoToken 支持的模型 ID再确认baseUrl没有多写或少写路径。用 curl 直接测一次curl https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer 你的Key \ -H Content-Type: application/json \ -d {model:claude-sonnet-4-20250514,messages:[{role:user,content:hi}]}能返回正常 JSON 就说明 Key 和通道没问题问题在工具配置侧。报错七OAuth 相关提示有些工具走 OAuth 流程如果你用的是 API Key 模式需要在工具设置里切换到 API Key 认证别选 OAuth。Codex 的auth.json里如果残留了旧凭据清掉重新填 Base URL、Key、Model ID 三件套。6. 远程开发环境配好后API 凭据统一走 TaoToken 的接入方式SSH 通了之后你大概率会在 Ubuntu 上跑各种开发工具。这些工具调用模型时都需要 Base URL、Key、Model ID 三样东西。与其每个工具单独申请、单独配不如统一走 TaoToken 的 API 通道一套 Key 到处复用。接入方式很简单在工具的模型配置里填{ provider: openai-compatible, baseUrl: https://taotoken.net/api, apiKey: 在 TaoToken 控制台生成的 Key, model: claude-sonnet-4-20250514 }Key 的生成入口在 TaoToken 控制台的 API Keys 页面。如果你用的是 Claude Code 这类工具配置项名称可能不同但核心就是 Base URL 填https://taotoken.net/apiKey 填生成的令牌Model ID 填你要用的模型。对于长期在远程环境里做编码或跑 Agent 的场景可以考虑用 Coding Plan把常用模型的调用额度集中管理省得每次换工具都重新配。验证模型是否可用可以直接在模型对话页面发一条测试消息确认返回正常再接到工具里。一个实用技巧把 Base URL 和 Key 写进 Ubuntu 的环境变量工具会自动读取echo export TAOTOKEN_BASE_URLhttps://taotoken.net/api ~/.bashrc echo export TAOTOKEN_API_KEY你的Key ~/.bashrc source ~/.bashrc这样在远程终端里跑的任何工具只要支持读环境变量就不用重复填。换机器时把这两行复制过去就行。最后提醒一句SSH 的密钥和 API 的 Key 是两回事。SSH 密钥管的是「你能不能登录这台 Ubuntu」API Key 管的是「你的工具能不能调用模型」。两套凭据分开管理别混在一起。SSH 配好后把 API 接入文档存个书签以后换工具直接照着填三件套五分钟搞定。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。