☰
三分钟搞定 SSH 免密登录云服务器:TaoToken 统一 Key 配置与 ssh-copy-id 验证
2026/9/29 10:40:10 网站建设 项目流程

1. 为什么每次连服务器都要输密码,这事到底卡在哪

SSH 免密登录这件事,说穿了就是把「钥匙」和「锁」分开放:私钥留在你本地电脑,公钥丢到云服务器的授权文件里。之后你敲ssh ubuntu@1.2.3.4,SSH 客户端拿本地私钥去和服务器上的公钥做一次数学配对,配对成功就直接放行,密码那一步自然就省了。它适合谁?适合所有需要频繁登录云服务器的人——部署项目、看日志、传文件、跑脚本,只要一天连超过三次,配免密就是稳赚不赔的投入。

但实际动手时,很多人会卡在几个具体的地方:本地到底有没有现成密钥、ssh-copy-id报Permission denied、公钥传上去了却还是要密码、~/.ssh/config写完了ssh 别名连不上。这些问题的根子往往不在 SSH 本身,而在权限、路径、以及多环境凭据散落各处没统一管理。这篇就按「本地生成 → 分发公钥 → 写 config → 验证 → 排错」的顺序走一遍,目标是一次配置三分钟连通,同时把多台服务器、多个环境的 Key 和 API 通道用 TaoToken 收拢到一处,省得以后每加一台机器就翻一遍笔记。

我试过最笨的办法是每台服务器都手动cat >> authorized_keys,结果三台机器三种写法,最后自己都记不清哪台配过。后来固定成一套模板,才真正稳定下来。

2. 前置准备:本地密钥、服务器信息与 TaoToken 统一凭据

动手前先确认三样东西:本地终端(macOS/Linux 自带,Windows 用 PowerShell 或 WSL)、一台能密码登录的云服务器(Ubuntu/CentOS 都行)、以及服务器的公网 IP 和登录用户名。用户名别想当然,腾讯云 Ubuntu 镜像默认是ubuntu,CentOS 常见是root或centos,阿里云部分镜像是ecs-user,填错了ssh-copy-id会直接拒绝。

这里插一个容易被忽略的点:当你后面要管理多台服务器、多个项目环境时,SSH Key 只是凭据的一部分,API Key、模型调用通道同样是凭据。如果每台机器、每个项目都单独记一套,迟早乱。我的做法是用 TaoToken 把这类统一 Key/API 通道集中管理,本地只维护一份配置,换机器时不用重新翻找。它的控制台在 https://taotoken.net/api ,API Keys 管理页在 https://taotoken.net/api-keys ,接入文档在 https://taotoken.net/doc ,需要对话调试模型可以走 https://taotoken.net/models ,长期编码或跑 Agent 场景则看 https://taotoken.net/coding-plan 。官网入口是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,先注册拿到统一 Key,后面配置里直接引用,比散落各处强很多。

注意:私钥文件(如id_ed25519)绝对不能外传、不能提交到 Git、不能贴进聊天窗口。公钥(id_ed25519.pub)才是可以分发的那个。

3. 可复制配置:ssh-keygen 生成、ssh-copy-id 分发、config 骨架

3.1 检查本地是否已有密钥

先看本地有没有现成的,有就跳过生成步骤,别重复造:

ls -la ~/.ssh/

如果输出里出现id_ed25519和id_ed25519.pub,说明已经有了。只有known_hosts没有密钥对,才需要往下走。

3.2 生成 Ed25519 密钥对

ssh-keygen -t ed25519 -C "your_email@example.com"

执行后会问三件事:保存路径(直接回车用默认~/.ssh/id_ed25519)、passphrase(想要真免密就留空直接回车)、确认 passphrase(再回车)。-C后面是注释,写个能认出这台机器的标识就行,方便以后在服务器authorized_keys里辨认是谁的钥匙。

3.3 用 ssh-copy-id 分发公钥

ssh-copy-id -i ~/.ssh/id_ed25519.pub ubuntu@182.254.137.33

把ubuntu换成你的用户名,IP 换成你的公网 IP。这一步会要求输入一次服务器密码,输完公钥就追加到服务器的~/.ssh/authorized_keys里了。如果提示ssh-copy-id: command not found(Windows 常见),用下面这条替代:

type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh ubuntu@182.254.137.33 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

注意我在这里补了chmod 700和chmod 600,原版命令没带权限设置,是后面「传了公钥还要密码」的高频原因。

3.4 写 ~/.ssh/config 骨架

每次敲一长串ubuntu@182.254.137.33也烦,用别名收一下。编辑~/.ssh/config:

Host myserver HostName 182.254.137.33 User ubuntu IdentityFile ~/.ssh/id_ed25519 IdentitiesOnly yes ServerAliveInterval 60

IdentitiesOnly yes很关键,它强制只用指定的这把私钥,避免本地有多把钥匙时 SSH 挨个试导致被服务器拒绝。ServerAliveInterval 60是防长时间空闲断连。写完记得改权限:

chmod 600 ~/.ssh/config chmod 700 ~/.ssh

权限不对,SSH 会直接忽略这个 config 文件,表现为「配了别名却连不上」。

4. 验证请求:免密登录成功与结果确认

配置完先做一次最朴素的验证:

ssh myserver

如果直接进入服务器、没有提示password:,就成功了。想更明确地确认走的是密钥而不是缓存,加-v看握手细节:

ssh -v myserver 2>&1 | grep -i "publickey\|authenticated"

看到Authenticated to 182.254.137.33且前面有Offering public key字样,说明公钥认证生效。再补一条非交互验证,适合写进脚本:

ssh -o BatchMode=yes myserver "echo connected && hostname"

BatchMode=yes会禁止任何密码交互,能返回connected和主机名,就证明免密链路完全通了。这一步过了,后面部署项目、跑自动化脚本都不会再被密码卡住。

5. 本篇常见错排查

报错一:Permission denied (publickey)。九成是服务器端权限问题。登录服务器(用密码方式)执行:

chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys

家目录权限也不能太开放,chmod 755 ~是安全上限,777会被 SSH 拒绝。

报错二:ssh-copy-id提示REMOTE HOST IDENTIFICATION HAS CHANGED。服务器重装过系统,指纹变了。确认是同一台机器后,清掉旧指纹:

ssh-keygen -R 182.254.137.33

报错三:公钥传了,还是要密码。检查服务器authorized_keys里公钥是不是被换行截断了,一条公钥必须在一行内。另外确认sshd_config里PubkeyAuthentication yes没被注释掉,改完sudo systemctl restart sshd。

报错四:ssh myserver提示Bad owner or permissions on ~/.ssh/config。就是前面说的权限问题,chmod 600 ~/.ssh/config即可。

报错五:多把密钥时连错机器。在 config 里给每个 Host 都加IdentitiesOnly yes,并明确IdentityFile,别让 SSH 自己猜。

6. 多环境凭据收口:用 TaoToken 统一 Key 与 API 通道

SSH 免密解决的是「登录服务器」这一层,但真正跑项目时,你还会遇到另一层凭据:模型 API Key、不同环境(开发/测试/生产)的调用通道。如果每台服务器、每个项目都单独配一套,换机器、加环境时就会重复踩坑。我的做法是把这类统一 Key 和 API 通道交给 TaoToken 管理,本地和服务器都只引用同一份配置,减少散落。

具体操作上,先去 https://taotoken.net/api-keys 生成统一 Key,接入方式参考 https://taotoken.net/doc ,需要调试模型对话走 https://taotoken.net/models ,长期编码或 Agent 场景看 https://taotoken.net/coding-plan ,控制台总入口是 https://taotoken.net/api 。这样 SSH 负责「进得去机器」,TaoToken 负责「机器上的项目拿得到凭据」,两层分开管,互不干扰。

如果你在排障或接入阶段卡住,优先看 API Keys 和接入文档;验证模型是否通,用模型对话页;长期编码和 Agent 场景,直接上 Coding Plan。把这两层都收口之后,加一台新服务器就是复制 config 片段 + 跑一次ssh-copy-id,三分钟确实能搞定。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询