这篇用来复制 SSH key 相关命令。
生成 ed25519 key
ssh-keygen -t ed25519 -C "you@example.com" -f ~/.ssh/id_ed25519_github如果是给另一个 GitHub 账号单独生成 key,可以换文件名:
ssh-keygen -t ed25519 -C "blog@example.com" -f ~/.ssh/id_ed25519_r_gc查看公钥
cat ~/.ssh/id_ed25519_github.pub把输出内容复制到 GitHub:
GitHub -> Settings -> SSH and GPG keys -> New SSH key注意复制的是 .pub 公钥,不是没有后缀的私钥。
公钥放到目标服务器
原则很简单:
私钥留在访问方公钥放到被访问方比如从自己的电脑访问一台 Linux 服务器,就在自己的电脑生成 key,然后把 .pub 公钥放到目标服务器对应用户的:
~/.ssh/authorized_keys如果目标登录用户是 deploy:
/home/deploy/.ssh/authorized_keys如果目标登录用户是 root:
/root/.ssh/authorized_keys快捷添加公钥
本机执行:
ssh-copy-id -i ~/.ssh/id_ed25519_github.pub user@server_ip指定 SSH 端口:
ssh-copy-id -i ~/.ssh/id_ed25519_github.pub -p 2222 user@server_ip它会自动把公钥追加到目标服务器的:
~/.ssh/authorized_keys第一次执行通常需要输入目标服务器用户密码,因为此时目标服务器还没有你的公钥,只能先用密码登录一次。
成功后测试:
ssh user@server_ip如果你的私钥设置了 passphrase,后续登录时可能还会输入私钥密码。这个不是服务器用户密码。
如果服务器已经禁用了密码登录:
PasswordAuthentication no那么 ssh-copy-id 也无法用密码进去。此时只能通过云厂商控制台、已有可登录账号、服务器面板,或者让管理员帮你把公钥放进去。
已登录服务器后手动添加
如果你已经登录到了目标服务器,可以直接在服务器上追加公钥。
先在本机查看并复制公钥:
cat ~/.ssh/id_ed25519_github.pub复制整行内容,格式类似:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... you@example.com然后在目标服务器上执行:
mkdir -p ~/.sshchmod 700 ~/.sshcat >> ~/.ssh/authorized_keys粘贴刚才复制的公钥整行,回车,然后按 Ctrl + D 结束输入。
最后设置权限:
chmod 600 ~/.ssh/authorized_keys也可以用 echo 一行追加:
mkdir -p ~/.sshchmod 700 ~/.sshecho 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... you@example.com' >> ~/.ssh/authorized_keyschmod 600 ~/.ssh/authorized_keys注意使用 >>,不要随手用 >:
>> 追加,不会删除原有 key> 覆盖,会清空 authorized_keys 里的原有 key如果确定要重建整个 authorized_keys,才使用:
echo 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... you@example.com' > ~/.ssh/authorized_keys设置权限
chmod 700 ~/.sshchmod 600 ~/.ssh/id_ed25519_githubchmod 644 ~/.ssh/id_ed25519_github.pub如果权限太开放,SSH 可能会拒绝使用私钥。
启动 ssh-agent 并添加 key
eval "$(ssh-agent -s)"ssh-add ~/.ssh/id_ed25519_github查看 agent 里已有 key:
ssh-add -l从 agent 删除某个 key:
ssh-add -d ~/.ssh/id_ed25519_github清空 agent 中所有 key:
ssh-add -D测试 GitHub SSH
普通测试:
ssh -T git@github.com如果 ~/.ssh/config 里配置了 Host 别名:
ssh -T git@github-r-gc成功时通常会看到类似:
Hi USER! You've successfully authenticated, but GitHub does not provide shell access.常用参数解释
ssh-keygen:生成 SSH 密钥。
-t ed25519:指定密钥算法。现在一般优先用 ed25519。
-C "you@example.com":给 key 加注释,常用邮箱或用途,方便以后识别。
-f ~/.ssh/id_ed25519_github:指定生成文件路径和文件名。
.pub:公钥文件,可以上传到 GitHub。
没有 .pub 后缀的文件:私钥文件,不能公开。
ssh-agent:本地密钥代理,可以记住已添加的私钥。
ssh-add:把私钥加入 agent。
ssh -T:测试 SSH 认证,不打开远程 shell。
authorized_keys:目标服务器上保存允许登录的公钥列表。
ssh-copy-id:把本机公钥复制到目标服务器 authorized_keys 的快捷命令。
>>:追加内容到文件末尾,适合给 authorized_keys 增加新公钥。
>:覆盖文件内容,可能删除已有公钥,谨慎使用。