马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
用公钥登录远程服务器,可以免去每次输入密码的麻烦,也能降低密码被暴力猜解的风险。很多运维同学的第一道门槛,是"公钥到底在自己电脑的哪个位置、怎么生成"。这篇文章把 Windows 下生成 SSH 公钥的完整步骤整理出来,顺带说明生成之后应该把什么内容放到服务器上。
为什么要用 SSH 公钥登录
密码认证每次都要联网传送口令,一旦口令简单或者被撞库,服务器就可能被攻破。公钥认证改成"本地私钥 + 服务器公钥"配对校验:
- 私钥留在本地,绝不外传,文件权限要严格控制。
- 公钥(通常以
.pub 结尾)可以随便放到服务器上,即使泄露也顶多只能加密数据,不能反向登录。
- 配合免密登录脚本、Ansible、Git 远程拉取时,不用在每条命令里重复敲密码。
第一步:打开命令提示符
按 Win 键,直接输入 cmd,在搜索结果里选中"命令提示符"回车。打开之后窗口里应该能看到 C:\Users\你的用户名> 这样的前缀,说明环境正常。
如果你更习惯 PowerShell,也可以直接用 PowerShell 执行后面的命令,效果是一样的——ssh-keygen 不区分在哪个终端里跑。
第二步:生成密钥对
在命令行里输入下面这一行,然后按回车:
ssh-keygen
接着程序会连续问几个问题,一路直接按 Enter 用默认值就行。整个过程会依次出现三处提示,都回车即可:
- 保存位置(默认
C:\Users\你的用户名\.ssh\)
- 文件名称(默认
id_rsa)
- 通行口令 passphrase(留空则免密)
全部走完之后,命令行会出现密麻麻的随机图形,那是 RSA 密钥的 ASCII 展示,看到它就说明密钥对已经生成好了。
第三步:确认密钥文件落在哪
生成成功后,.ssh 目录里会多出两个文件:
| 文件名 | 作用 | 能否外传 |
id_rsa | 私钥,本地登录时用来证明身份 | 不可外传,权限必须收紧 |
id_rsa.pub | 公钥,要放到目标服务器上 | 可以公开 |
Windows 上默认的保存路径一般是 C:\Users\你的用户名\.ssh\id_rsa.pub。如果当时改了文件名,这里的名字要跟着换。
第四步:把公钥放到远程服务器
用记事本打开 id_rsa.pub,把里面的完整一行文本复制出来(注意是整行,末尾可能有空格和你的邮箱或主机名),贴到远程服务器对应用户家目录下 .ssh/authorized_keys 文件里,一行一条。
如果你刚用的是 Windows 自带的 OpenSSH,也可以一条命令直接推送过去,免得手动复制粘贴:
ssh-copy-id 用户名@服务器地址
提示输入一次目标服务器密码,之后这台机器到该服务器的登录就不再要密码了。Windows 原生 OpenSSH 自带 ssh-copy-id,老版本的 Git Bash 可能没有这个脚本,那种情况下就回到手动复制粘贴。
几个容易踩的坑
- 权限不对会直接拒绝登录。服务器上
.ssh 目录权限建议 700,authorized_keys 建议 600,太松会被 SSH 服务端判定不安全并忽略。
- 改了文件名就找不到公钥。密钥名不是默认
id_rsa 时,登录需要显式加参数:ssh -i ~/.ssh/你的密钥名 用户名@地址。
- Windows 的换行问题。手动粘贴公钥进 Linux 文件时,注意别把 Windows 的
^M 带进去,麻烦的话用 ssh-copy-id 自动处理。
- 私钥权限过宽。Windows 下如果报私钥可被其他进程读取之类的警告,把
id_rsa 的读写权限收窄到只有当前用户。
快速自查清单
按下面四步走一遍,基本能覆盖 90% 的公钥登录失败情况:
- 本地
.ssh 下确实有 id_rsa 与 id_rsa.pub;
- 服务器对应用户家目录下有
.ssh/authorized_keys;
authorized_keys 里的内容与本地 id_rsa.pub 的文本完全一致(多一个换行或空格都会失败);
- 本地到服务器走的是默认 22 端口;改过端口的话要用
ssh -p 端口 或写进 ~/.ssh/config。
生成一次公钥能用很久,私钥丢了才需要重新生成。日常建议给私钥加一个 passphrase,即使电脑中了木马,攻击者拿到文件也还要再破解一次口令。
qidao123.com企服评测-应用市场 编辑提示
本文由齐道123 IT 运维社区整理。文中所述为通用 SSH 公钥生成与部署方法,适用于持有合法授权的自有服务器与开发环境;请仅在自己拥有或经授权的设备上配置密钥,不要把私钥上传到任何公共代码仓库或发给他人。命令示例在 Windows 命令提示符 / PowerShell 与主流 Linux 发行版上均可通过,实际输出提示符可能因系统版本略有差异。
|