news 2026/7/5 21:33:39

告别密码登录:使用WindTerm配置SSH密钥实现云服务器安全连接

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
告别密码登录:使用WindTerm配置SSH密钥实现云服务器安全连接

1. 项目概述:为什么我们需要告别密码登录?

如果你还在用“用户名+密码”的方式登录你的阿里云或腾讯云服务器,那就像是用一把生锈的挂锁守护你的金库。每次登录,密码在网络中传输,都伴随着被截获的风险。尤其是在自动化脚本、CI/CD流水线或日常频繁运维的场景下,手动输入密码不仅效率低下,更是安全上的巨大隐患。

SSH密钥对登录,正是解决这个痛点的标准答案。它基于非对称加密原理,彻底摒弃了密码传输。简单来说,你本地生成一对密钥:一把私钥(绝对保密,存于本地),一把公钥(可以公开,放到服务器上)。登录时,服务器用你预留的公钥出一道“数学题”,只有持有对应私钥的你才能解出答案,从而证明身份。整个过程,私钥从未离开你的电脑,从根本上杜绝了密码泄露和暴力破解的风险。

而WindTerm,作为一款功能强大且免费的终端工具,其对SSH协议的原生支持和优秀的密钥管理功能,让它成为连接云服务器的绝佳搭档。今天,我就以一个运维老手的视角,带你从零开始,在WindTerm中生成密钥对,并正确配置到阿里云和腾讯云服务器上,实现真正的一键安全登录。这个流程不仅适用于个人开发者,对于团队统一管理服务器访问权限,同样具有极高的参考价值。

2. 核心原理与准备工作:理解密钥对的“锁与钥匙”

在动手之前,我们必须把核心原理吃透,这能帮你避开后面90%的坑。SSH密钥认证不是魔法,其安全性完全建立在非对称加密的数学基础之上。

2.1 非对称加密:公钥与私钥的角色

想象一下,你有一把特殊的锁(公钥)和唯一能打开它的钥匙(私钥)。这把锁的设计非常巧妙,任何人拿到它都可以把门锁上(加密数据),但一旦锁上,只有你那把唯一的钥匙才能打开(解密数据)。

在SSH登录场景中:

  • 公钥 (Public Key):就是这把“锁”。它的内容是一长串字符,通常以ssh-rsa AAAAB3...ecdsa-sha2-nistp256 AAAAE2...开头。你可以把它放在任何需要的地方(比如服务器的~/.ssh/authorized_keys文件里),完全公开也没有关系。
  • 私钥 (Private Key):就是那把“唯一的钥匙”。它通常保存在你本地电脑的~/.ssh/目录下,文件名可能是id_rsa,id_ecdsa,ed25519等。你必须像保护银行卡密码一样保护它,绝不能泄露给任何人。私钥文件本身也常常通过一个“密码短语”进行二次加密,即使文件被盗,没有密码短语也无法使用。

登录时,服务器用你事先放置的公钥加密一个随机生成的挑战消息,发送给你的客户端。你的WindTerm使用本地私钥解密这个消息,并将结果发回服务器。服务器验证解密结果正确,即确认了你拥有对应的私钥,从而允许登录。全程无需传输密码。

2.2 工具与环境准备

工欲善其事,必先利其器。开始前,请确保你已准备好以下环境:

  1. WindTerm安装:前往WindTerm的GitHub发布页或官网下载最新版本。它是一款绿色软件,解压即可运行,兼容Windows、macOS和Linux。
  2. 云服务器实例:确保你拥有一台正在运行的阿里云ECS或腾讯云CVM实例,并知道其公网IP地址。同时,你需要拥有一个可以通过密码登录的初始账户(通常是rootubuntu,centos等系统用户)。
  3. 基础网络连通性:确保你的本地网络可以访问云服务器的22端口(SSH默认端口)。你可以通过ping <你的服务器IP>telnet <你的服务器IP> 22(或使用nc -zv <你的服务器IP> 22)来测试。

注意:在配置密钥登录的整个过程中,请务必保持一个可用的密码登录SSH会话窗口处于打开状态。这是你的“救命通道”,万一密钥配置出错导致无法登录,你还可以通过密码连接上去进行修复。

3. 在WindTerm中生成与管理SSH密钥对

WindTerm内置了便捷的密钥生成和管理器,这比使用命令行ssh-keygen对新手更为友好。

3.1 生成新的密钥对

打开WindTerm,按照以下步骤操作:

  1. 点击顶部菜单栏的Session->Authentication->Manage Public Keys...。这会打开密钥管理对话框。

  2. 在管理对话框中,点击Generate按钮。

  3. 这时会弹出密钥生成向导,你需要关注几个关键参数:

    • Key Type (密钥类型):这是最重要的选择。目前主流且推荐的有两种:
      • ed25519:当前最安全、性能最好的算法。它生成的密钥更短,签名速度更快,且安全性被认为高于相同长度的RSA。如果你的WindTerm和服务器OpenSSH版本都较新(一般近5年内的系统都支持),无脑选这个。
      • RSA:历史最悠久,兼容性最好。如果服务器系统版本非常老旧(比如CentOS 6),可能只支持RSA。密钥长度建议选择4096 bits,2048位已逐渐被认为不够安全。
    • Key Size (密钥长度):选择ed25519时长度固定。选择RSA时,请务必选择4096
    • Comment (注释):这里可以填写一个标识,比如your_email@example.commy-aws-ec2。这个注释会附在公钥末尾,帮助你区分不同的密钥。
    • Passphrase (密码短语)强烈建议设置!这为你的私钥加上了一层密码保护。即使私钥文件不慎泄露,对方没有密码短语也无法使用。请设置一个强密码并牢记。
  4. 点击Generate,WindTerm会开始生成密钥。过程中你可能会被要求随机移动鼠标以生成随机数熵,这是正常的安全操作。

  5. 生成完成后,WindTerm会显示你的公钥内容。请务必点击Save public keySave private key,将它们保存到你指定的安全目录,例如D:\ssh_keys\。建议使用有意义的文件名,如my_aliyun_ed25519my_aliyun_ed25519.pub

3.2 密钥的保存与备份策略

私钥的安全就是服务器安全的第一道防线。请遵循以下最佳实践:

  • 本地存储:将私钥保存在你的个人电脑上,并确保其文件权限设置为仅当前用户可读。在Linux/macOS上,可以通过chmod 600 ~/.ssh/id_ed25519命令实现。
  • 绝不传输:永远不要通过电子邮件、即时通讯工具或任何不加密的通道发送你的私钥文件。
  • 安全备份:将加密后的私钥文件(以及密码短语)备份到安全的离线存储介质,如加密的U盘或硬件密码管理器。公钥则无需保密,可以随意备份。
  • 一机一钥:对于不同的服务器或服务器组,建议使用不同的密钥对。这样即使某一台服务器的密钥泄露,也不会危及其他服务器。

4. 将公钥部署到阿里云与腾讯云服务器

生成密钥对后,下一步就是将公钥“安装”到你的服务器上。有两种主流方法:通过云平台控制台注入,或通过SSH命令手动上传。我强烈推荐第一种方法,因为它更规范,且能被云平台的服务(如控制台登录、云助手等)识别。

4.1 方法一:通过云平台控制台注入(推荐)

这种方法将公钥作为云服务器的“登录凭证”进行管理,与服务器实例元数据绑定,更加清晰和安全。

对于阿里云ECS:

  1. 登录阿里云控制台,进入ECS实例列表
  2. 找到目标实例,在“操作”列中,点击“更多” -> “密码和密钥” -> “重置实例密码”。别被名字迷惑,这里同样管理密钥。
  3. 在弹出的侧边栏中,切换到“SSH密钥对”标签页。
  4. 点击“创建或导入密钥对”
    • 如果你是第一次使用,可以选择“创建密钥对”,阿里云会帮你生成并让你下载私钥(格式为.pem)。但我们已经用WindTerm生成了,所以这里选择“导入密钥对”
  5. 在“导入密钥对”对话框中,为密钥对起个名字(如windterm-key),然后将WindTerm生成的公钥文件(.pub文件)的全部内容复制粘贴到“公钥内容”文本框里。
  6. 点击“确定”导入。导入成功后,在实例的“密钥对”列表里,点击“绑定密钥对”,选择你刚导入的密钥对,并确认绑定。
  7. 绑定后,你需要重启ECS实例,新的密钥才会生效。重启可以通过控制台操作。

对于腾讯云CVM:

  1. 登录腾讯云控制台,进入CVM实例列表
  2. 点击目标实例的ID/名称,进入实例详情页。
  3. 在左侧导航栏,点击“密钥”
  4. 点击“创建密钥”
    • 同样,选择“使用已有公钥”
  5. 为密钥命名(如windterm-key),将WindTerm生成的公钥内容粘贴到“公钥”字段中。
  6. 点击“确定”创建。
  7. 创建成功后,在密钥列表中找到该密钥,点击右侧的“绑定/解绑”,在弹出的窗口中选择你的目标CVM实例,点击“确定”进行绑定。
  8. 与阿里云不同,腾讯云绑定密钥后,通常需要关机再开机(控制台操作)才能使密钥登录生效。注意,是“关机-开机”,不是“重启”,因为重启可能不会重新加载密钥元数据。

实操心得:通过控制台绑定密钥后,系统会自动帮你将公钥写入服务器内指定用户的~/.ssh/authorized_keys文件。在阿里云中,默认用户是root;在腾讯云中,取决于你创建实例时选择的镜像(如Ubuntu镜像是ubuntu用户)。这是最省心、最不易出错的方式。

4.2 方法二:通过SSH命令手动上传(备用方案)

如果控制台操作不便,或者你需要将密钥部署给非默认用户(例如新建的deploy用户),可以使用此方法。

  1. 首先,确保你已经能用密码通过WindTerm或其它终端登录到服务器。
  2. 在WindTerm中,打开你保存公钥的.pub文件,复制其全部内容。
  3. 在已连接的服务器终端中,执行以下命令序列:
# 1. 确保 .ssh 目录存在,并设置正确的权限 mkdir -p ~/.ssh chmod 700 ~/.ssh # 2. 将公钥追加到 authorized_keys 文件 echo “你复制的公钥内容” >> ~/.ssh/authorized_keys # 3. 设置 authorized_keys 文件的权限(至关重要!) chmod 600 ~/.ssh/authorized_keys

这里有一个巨坑~/.ssh目录的权限必须是700(drwx------),authorized_keys文件的权限必须是600(-rw-------)。如果权限设置不对,OpenSSH出于安全考虑会直接拒绝使用密钥登录,你会遇到“Permission denied (publickey)”的错误而百思不得其解。

5. 在WindTerm中配置会话使用密钥登录

公钥部署到服务器后,我们需要告诉WindTerm,在连接这个服务器时使用我们刚生成的私钥。

  1. 在WindTerm主界面,点击Session->New Session,或者点击工具栏的“新建会话”图标。
  2. 在新建会话对话框中,选择SSH协议。
  3. Host字段填写你的服务器公网IP地址。
  4. Port保持默认的22(如果你修改过SSH端口,请填写修改后的端口)。
  5. 最关键的一步:在Authentication部分,将方法从默认的Password改为Public Key
  6. 点击Public Key下拉框右侧的文件夹图标,浏览并选择你之前保存的私钥文件(例如my_aliyun_ed25519,注意没有.pub后缀)。
  7. 如果你的私钥设置了密码短语(Passphrase),在Passphrase字段输入它。
  8. User字段填写用户名。这需要与你部署公钥时对应的用户名一致:
    • 通过阿里云控制台绑定,默认用户是root
    • 通过腾讯云控制台绑定,Ubuntu系统是ubuntu,CentOS系统是rootcentos(具体看镜像说明)。
    • 通过手动命令上传,就是你执行命令时所在的用户。
  9. 你可以给这个会话起个名字(如阿里云生产服务器),然后点击Connect

如果一切配置正确,WindTerm将直接连接服务器,无需输入密码。首次连接时会询问你是否信任主机密钥,点击“Accept & Save”即可。

6. 强化安全:禁用密码登录与更改SSH端口

实现密钥一键登录后,密码登录就变成了一个安全隐患入口。我们应该关闭它。同时,修改默认的SSH端口(22)可以避开互联网上大量的自动化扫描和爆破攻击。

警告:在进行以下操作前,请务必确保你的密钥登录已经100%测试成功,并且保持一个可用的密码登录会话窗口打开,以备出错时恢复。

6.1 禁用SSH密码登录

通过密钥登录到服务器,然后编辑SSH服务端配置文件:

sudo vim /etc/ssh/sshd_config

找到以下两行,并将其值修改为no

# 禁止使用密码认证 PasswordAuthentication no # 禁止空密码登录(通常默认就是no) PermitEmptyPasswords no # 如果你使用的是较新版本的OpenSSH,可能还需要关注这个选项,确保其为默认的 `prohibit-password` 或 `no` # PubkeyAuthentication yes # 这一行确保是 yes,默认就是

6.2 修改SSH默认端口

在同一个/etc/ssh/sshd_config文件中,找到#Port 22这一行。去掉开头的注释#,并将22改为一个1024到65535之间、未被系统其他服务占用的端口号,例如5922

Port 5922

6.3 应用配置并重启服务

修改完成后,保存文件并退出编辑器。然后重启SSH服务以使配置生效:

  • 对于使用systemd的系统(如CentOS 7+, Ubuntu 16.04+)

    sudo systemctl restart sshd # 或者 sudo systemctl restart ssh
  • 对于使用SysV init的系统(如CentOS 6)

    sudo service sshd restart

重启服务后,立即用新的端口和密钥在WindTerm中测试连接,而不要关闭当前的密码登录会话!

在WindTerm中新建或编辑会话,将Port22改为你设置的端口(如5922),然后尝试连接。如果连接成功,说明配置正确。此时,你再可以关闭旧的密码登录会话。

重要注意事项

  1. 防火墙:修改端口后,务必在云服务器的安全组(阿里云/腾讯云控制台)和服务器内部的防火墙(如firewalldufw)中,放行你新设置的SSH端口,同时可以考虑禁止22端口的入站流量。
  2. SELinux:如果你使用的是CentOS/RHEL系统并启用了SELinux,修改SSH端口后需要更新SELinux策略:sudo semanage port -a -t ssh_port_t -p tcp <你的新端口号>
  3. 连接命令:以后在命令行中使用ssh连接时,需要指定端口:ssh -p 5922 user@server_ip

7. 常见问题与故障排查实录

即使按照步骤操作,你也可能会遇到一些问题。下面是我在多年运维中总结的常见“坑位”和解决方法。

7.1 连接失败:Permission denied (publickey)

这是最常见的问题。意味着服务器拒绝了你的密钥认证。请按以下顺序排查:

  1. 私钥路径或密码短语错误:在WindTerm会话设置中,双击检查私钥文件路径是否正确,密码短语是否输入无误(注意大小写)。
  2. 用户名错误:确认WindTerm中配置的用户名,与服务器上存放公钥的~/.ssh/authorized_keys文件所属用户是同一个。
  3. 服务器公钥未生效
    • 控制台绑定方式:确认是否执行了重启(阿里云)关机再开机(腾讯云)操作。
    • 手动上传方式:登录服务器,检查对应用户家目录下的~/.ssh/authorized_keys文件,确认你的公钥已正确写入。可以使用cat ~/.ssh/authorized_keys命令查看。
  4. 文件权限问题(手动上传的致命坑):登录服务器,执行ls -la ~/.ssh/。必须确保:
    • .ssh目录权限为700(drwx------)
    • authorized_keys文件权限为600(-rw-------)
    • 文件所有者是正确的用户。 如果不符,使用chmod命令修正。
  5. 服务器SSH配置未启用密钥登录:检查服务器/etc/ssh/sshd_config,确保PubkeyAuthentication yes这一行存在且未被注释。
  6. 私钥格式问题:WindTerm生成的私钥是OpenSSH格式。如果你是从其他工具(如PuTTY的.ppk)转换而来,可能格式不对。确保使用WindTerm原生生成或使用ssh-keygen命令生成的密钥。

7.2 连接超时或网络错误

  1. 安全组/防火墙:检查云服务器控制台的安全组规则,是否允许你的本地IP地址访问服务器的SSH端口(22或你修改后的端口)。
  2. 服务器未运行SSH服务:在服务器上执行sudo systemctl status sshd查看服务状态。
  3. IP地址或端口错误:仔细核对WindTerm会话中填写的IP和端口。

7.3 修改端口后无法连接

  1. 安全组未更新:这是最可能的原因。在云控制台,将安全组入站规则中的端口号从22更新为你设置的新端口。
  2. 服务器防火墙未更新:如果服务器内启用了firewalldufw,需要添加新端口的规则。例如,对于firewalldsudo firewall-cmd --permanent --add-port=5922/tcp && sudo firewall-cmd --reload
  3. SELinux问题(仅限RHEL/CentOS):如前所述,执行sudo semanage port -a -t ssh_port_t -p tcp 5922

7.4 首次连接后,再次连接仍需密码

这种情况通常是因为WindTerm没有正确缓存或使用私钥。

  • 检查会话配置,确保认证方式已永久设置为Public Key并选择了正确的私钥文件。
  • 尝试删除WindTerm中该会话的配置,重新创建一次。
  • 检查服务器上该用户的authorized_keys文件,是否包含了多个公钥,可能存在格式错误导致后续的公钥失效。

8. 高级技巧与最佳实践

掌握了基础配置后,这些技巧能让你的SSH管理更高效、更安全。

8.1 使用SSH Config文件管理多台服务器

WindTerm支持读取本地的SSH配置文件(通常是~/.ssh/config)。你可以在此文件中为每台服务器定义别名、指定用户名、端口和私钥,这样在WindTerm中只需输入别名即可连接。

配置文件示例:

Host aliyun-prod # 自定义别名 HostName 123.123.123.123 # 服务器IP Port 5922 # SSH端口 User root # 用户名 IdentityFile ~/.ssh/my_aliyun_ed25519 # 私钥路径 ServerAliveInterval 60 # 每60秒发送保活包,防止连接断开 Host txcloud-dev HostName 234.234.234.234 Port 22 User ubuntu IdentityFile ~/.ssh/my_tx_ed25519

在WindTerm新建会话时,在Host字段直接填写aliyun-prod,它就会自动应用配置文件中的所有设置。

8.2 为私钥添加代理(ssh-agent)以省去重复输入密码短语

如果你为私钥设置了强密码短语,每次连接都要输入会很麻烦。ssh-agent是一个密钥管理器,可以将解密后的私钥缓存在内存中一段时间。

  1. 启动代理:在WindTerm的嵌入式Shell或你的系统终端中,执行eval “$(ssh-agent -s)”
  2. 添加私钥:执行ssh-add ~/.ssh/my_aliyun_ed25519,然后输入一次密码短语。
  3. 此后,在密码短语缓存的有效期内,使用该私钥的连接都不再需要输入密码。

安全提示ssh-agent将私钥存储在内存中。在不使用电脑时,记得锁定屏幕或执行ssh-add -D来清空代理中的所有密钥。

8.3 定期轮换密钥

出于安全最佳实践,建议每半年或一年更换一次SSH密钥对,特别是在团队成员变动时。

  1. 在WindTerm中生成一套新的密钥对。
  2. 将新公钥添加到服务器的authorized_keys文件中(追加,不要删除旧的)。
  3. 用新密钥测试登录成功。
  4. authorized_keys文件中移除旧的公钥。
  5. 最后,在本地安全地删除旧的私钥文件。

8.4 团队协作下的密钥管理

在团队中,不建议共享同一对私钥。最佳实践是:

  1. 每位成员生成自己的密钥对。
  2. 将各自的公钥提交到版本控制系统(如Git)的一个特定仓库或通过其他安全渠道收集。
  3. 在服务器上,使用自动化工具(如Ansible, Puppet)或统一的部署脚本,将所有成员的公钥批量写入服务器的authorized_keys文件,或者为每个成员创建单独的用户账户并分别管理密钥。
  4. 当成员离职时,只需从列表中移除其公钥即可。

配置完成后,那种无需输入密码、瞬间安全连接上服务器的顺畅感,会让你觉得之前的所有折腾都是值得的。它不仅提升了效率,更重要的是为你的服务器筑起了一道坚固的防线。记住,安全是一个持续的过程,定期审查你的密钥、端口和安全组规则,才能让这道防线始终稳固。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/5 21:33:31

人脸识别技术在智能家居中的应用与实现

1. 项目概述&#xff1a;当人脸识别遇上智能家居人脸识别技术早已不是科幻电影里的概念&#xff0c;它正在以惊人的速度渗透到我们的日常生活中。而智能家居作为现代家庭的新标配&#xff0c;与人脸识别的结合堪称天作之合。想象一下&#xff1a;当你走到家门口&#xff0c;门锁…

作者头像 李华
网站建设 2026/7/5 21:33:28

3款主流OCR API对比:百度 vs 阿里云 vs 腾讯云驾驶证识别实测

3款主流OCR API深度测评&#xff1a;百度、阿里云、腾讯云驾驶证识别技术实战解析在数字化转型浪潮中&#xff0c;证件识别技术已成为金融、交通、政务等领域的基础设施。本文基于50张涵盖模糊、反光、倾斜等复杂场景的测试样本&#xff0c;从工程实践角度对三大云服务商的OCR能…

作者头像 李华
网站建设 2026/7/5 21:32:46

STM32F446RE与BMI270的6DoF运动感知方案实现

1. 项目概述&#xff1a;BMI270与STM32F446RE的6DoF运动感知方案在嵌入式系统开发中&#xff0c;精确的运动感知能力正变得越来越重要。无论是可穿戴设备的姿态识别、无人机的飞行控制&#xff0c;还是工业设备的振动监测&#xff0c;都需要高精度的惯性测量单元(IMU)作为感知基…

作者头像 李华
网站建设 2026/7/5 21:31:52

OpenSSL核心功能揭秘:10大加密模块助你构建安全系统

OpenSSL核心功能揭秘&#xff1a;10大加密模块助你构建安全系统 【免费下载链接】openssl 项目地址: https://gitcode.com/openeuler/openssl 前往项目官网免费下载&#xff1a;https://ar.openeuler.org/ar/ OpenSSL是业界领先的开源加密工具包&#xff0c;为全球数百…

作者头像 李华
网站建设 2026/7/5 21:31:44

大数据原生集群 (Hadoop2.X为核心) 本地测试环境搭建二

上一篇补充小提示 根据上一篇安装好虚拟机和系统之后&#xff0c;在安装软件之前我有两个对于虚拟机的注意点想送给大家&#xff0c;大家可以不看&#xff0c;但是后期在虚拟机的使用上或许对你有帮助 一、在安装配置集群的时候&#xff0c;涉及到不同机器之间有关IP地址的设…

作者头像 李华
网站建设 2026/7/5 21:29:04

Multisim14.2仿真使用汇总

目录&#xff1a; 一、仿真软件说明 1、概述 2、元件库介绍及中英文对照 3、虚拟仪表介绍及使用说明 4、放置标题栏 5、增加描述框 6、中英文切换 7、电路向导 8、振荡电路设置 9、图纸中元件位置定位 二、软件的下载与安装 1、软件的下载 2、软件的安装 三、原理…

作者头像 李华