AI

SSH 免密登录 DSH接入服务器

配置 SSH 免密登录 —— 目的只有一个:让这本地Windows 不用每次输密码就能登录服务器

第 1 条:生成一对密钥

powershell

ssh-keygen -t ed25519 -f $env:USERPROFILE\.ssh\id_ed25519

拆开看:

部分含义
ssh-keygenSSH 自带的密钥生成工具
-t ed25519密钥类型。ed25519 比老的 RSA 更短更快更安全,现在推荐用它
-f <路径>密钥存到哪、叫什么。$env:USERPROFILE 就是 C:\Users\Sxry,所以最终是 C:\Users\Sxry\.ssh\id_ed25519

跑完会生成两个文件(这是理解整件事的关键):

  • id_ed25519 —— 私钥。相当于你家钥匙,绝不能给别人、不能进 Git、不能进备份包
  • id_ed25519.pub —— 公钥。相当于挂在门上的锁,可以随便公开发布

生成过程中它会问两件事:保存路径(你已经用 -f 指定了,直接回车)、passphrase(口令,可以留空直接回车;留空=登录时不问口令,配自动化脚本更方便)。

注意:如果 C:\Users\Sxry\.ssh 目录不存在,直接跑可能报错。先手动建一下:

powershell

New-Item -ItemType Directory -Path $env:USERPROFILE\.ssh -Force

-f 指定的是路径,不带 .pub,.pub 是它自动加的后缀。

第 2 条:把公钥装到服务器上

powershell

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

这条命令干了三件事,从右往左看:

① 远程执行的命令(引号里的部分,在服务器上跑):

片段作用
mkdir -p ~/.ssh确保服务器上有 ~/.ssh 目录(-p = 已存在也不报错)。~ 是 root 的家目录 /root
chmod 700 ~/.ssh把这个目录权限设成”只有我自己能读写进入”。SSH 强制要求,权限太开放会拒绝用密钥登录
cat >> ~/.ssh/authorized_keys把标准输入追加到 authorized_keys 文件末尾

authorized_keys 就是服务器的准入名单:里面每一行是一把被允许进门的公钥。用 >>(追加)而不是 >(覆盖)很重要——覆盖会把服务器上已有的其他公钥全删掉,导致别的机器也登不上了。

② 管道 |:把左边命令的输出(公钥内容)喂给右边的 ssh,作为远程那条 cat 的标准输入。

③ type <文件>:Windows 上就是 cat,把公钥文件内容打印出来。

整条命令读作:“把本机公钥的内容,通过 SSH 发到服务器上,追加进它的准入名单”。

之后发生了什么(原理)

以后你 ssh root@sxry.net 时,服务器会发一个随机挑战:

  1. 服务器说”证明你有对应私钥”
  2. 你的 ssh 客户端用本地私钥签名,把签名发回去
  3. 服务器用 authorized_keys 里那把公钥验证签名
  4. 通过 → 放行,全程私钥从不离开你的电脑

这就是为什么可以公开公钥、却必须保护私钥。

Posted in AI

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注