一句话结论
要用密钥(而不是密码)登录,你的公钥必须在服务器的 ~/.ssh/authorized_keys 文件里。把它放进去最简单的办法是 ssh-copy-id:
ssh-copy-id user@host 它让你输一次密码、追加你的公钥,从此用密钥登录。本文讲 ssh-copy-id、它不可用时的手动法(Windows、受限 shell)、以及手机上的一键法。
方法 1 —— ssh-copy-id(Linux/macOS)
# 复制你的默认公钥(~/.ssh/id_ed25519.pub)
ssh-copy-id user@host
# 或指定某把密钥:
ssh-copy-id -i ~/.ssh/mykey.pub user@host 它这一次用你的密码登录,需要时以正确权限创建 ~/.ssh,并把密钥追加到 authorized_keys。还没有密钥?先 ssh-keygen -t ed25519 生成(见 Ed25519 vs RSA)。
方法 2 —— 手动(Windows,或没有 ssh-copy-id)
Windows 不自带 ssh-copy-id。手动追加——把你 .pub 文件的内容贴进服务器的 authorized_keys:
# 从任意机器,一行搞定:
cat ~/.ssh/id_ed25519.pub | ssh user@host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys" Windows PowerShell:
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh user@host "cat >> .ssh/authorized_keys" chmod 很关键:权限太开放时 SSH 会忽略 authorized_keys。复制后密钥还不生效,看 Permission denied (publickey)。
方法 3 —— 手机上一键
手机上没有 ssh-copy-id 命令,也没法方便地把文件通过 SSH 管过去。好的移动客户端替你做:TermAI 在设备 Keychain 里生成 Ed25519 密钥,并有一个部署到服务器动作,通过一个已有的可用登录把公钥那半写进 authorized_keys——和 ssh-copy-id 做的一样,一键完成。之后你用密钥连接,无需密码。
验证成功
重新连接——应该不再要密码。如果还要,说明密钥没被接受:看 SSH 还在要密码 的六个常见原因(权限、用户错、sshd 配置……)。
常见问题
怎么把 SSH 密钥复制到服务器?
跑 ssh-copy-id user@host(Linux/macOS)。Windows 或受限环境下,手动把 .pub 文件追加到服务器的 ~/.ssh/authorized_keys。手机上用 TermAI 这类一键部署密钥的客户端。
ssh-copy-id 到底做了什么?
它用你的密码登录一次,把你的公钥追加到 ~/.ssh/authorized_keys 并设好权限。你的私钥从不离开你的机器。
authorized_keys 在哪?
在你登录的那个用户的家目录:服务器上的 ~/.ssh/authorized_keys。它必须是 600,在 700 的 .ssh 目录里。
找不到 ssh-copy-id 怎么办?
它不在 Windows 和一些精简系统上。手动管过去:cat key.pub | ssh user@host "cat >> ~/.ssh/authorized_keys"。
快速事实
- 目标:你的公钥进服务器的
~/.ssh/authorized_keys - 最简单:
ssh-copy-id user@host(Linux/macOS) - 手动 / Windows:把
.pub文件管进authorized_keys,再 chmod 600/700 - 手机:一键部署(TermAI)——和 ssh-copy-id 同效
- 只复制公钥;私钥留在你设备上
Free on iOS and Android. 5 AI requests/day on the free tier, plus unlimited SSH/SFTP and built-in Tailscale.