当前位置:首页 > 虚拟主机 > 正文

SSH密钥登录Linux服务器咋操作?, ssh客户端哪个好

SSH密钥登录是访问Linux弹性云服务器最安全、最便捷的认证方式,它通过公钥加密与私钥签名的配对机制,彻底取代了传统密码认证,能有效抵御暴力免费和中间人攻破。对于使用SSH客户端连接Linux云服务器的用户来说,掌握密钥对的生成、部署与登录流程,是保障云端业务安全的基础门槛。

SSH密钥登录的核心机制与安全优势

SSH密钥认证基于非对称加密算法(常见为RSA或ED25519),由一对密钥组成:公钥放置在服务器端的~/.ssh/authorized_keys文件中,私钥则保存在本地客户端,登录时,服务器用公钥加密一段随机数据发送给客户端,客户端用私钥解密后返回给服务器校验,整个过程私钥不出本地,网络传输中也不含任何可被截获的密码信息。

与传统密码登录相比,密钥方式具备明显的安全优势,密码在传输过程中容易通过键盘记录、网络嗅探等方式泄露,且弱密码极易被暴力免费工具在短时间内试出,而2048位及以上的RSA密钥,即便使用专业计算设备,免费也需要极长的时间,在现有算力条件下基本不可实现,密钥登录支持在服务器端彻底关闭密码认证,从根源上断绝了基于密码的攻破路径。

在大量云端攻破事件中,暴力免费是最常见的入侵手段,据国内安全机构近年发布的威胁分析报告,针对云服务器的恶意登录尝试绝大多数集中在22端口密码探测上,使用密钥登录后,这类自动化攻破工具会因缺少有效密钥而直接失效,服务器安全日志中的失败尝试数量会大幅下降。

密钥对的生成方式与客户端准备

在本地终端生成密钥对

在Windows、macOS或Linux本地终端中,使用OpenSSH自带的工具可以快速生成密钥对,Windows 10及以上版本自带的PowerShell或CMD已内置OpenSSH客户端,macOS和Linux则默认预装。

生成密钥的命令为ssh-keygen -t rsa -b 4096 -C "your_email@example.com",其中-t指定算法类型,-b指定密钥长度,4096位是当前推荐的安全标准;-C是注释信息,通常会填写邮箱或主机名,便于识别密钥来源,执行命令后,系统会提示选择密钥保存路径,默认位于当前用户目录下的.ssh文件夹,文件名为id_rsa(私钥)和id_rsa.pub(公钥),随后需要设置一个passphrase口令,这个口令用于加密本地私钥文件,即使私钥被他人拷贝,没有口令也无法使用。

生成完成后,id_rsa.pub就是需要部署到服务器的公钥,可以用文本编辑器打开查看,这是一段以ssh-rsa开头的字符串,结尾包含之前填写的注释信息。

云服务器控制台的密钥对管理

国内主流云服务商,如阿里云、西西安全、西西云等,在控制台均提供密钥对管理功能,使用这类功能,可以直接在云端生成密钥对,系统会自动下载私钥文件(通常为.pem格式),公钥则自动绑定至指定服务器,如果已有本地公钥,也可通过控制台上传公钥内容,在购买服务器或重装系统时直接载入,免去手动登录服务器部署的步骤。

注意:云端生成的私钥文件仅下载一次,务必妥善保存到本地安全目录,丢失后无法找回。

密钥部署到Linux弹性云服务器的完整流程

通过密码登录临时部署公钥

在首次配置服务器时,通常仍需要以密码方式登录,将本地生成的公钥写入服务器的授权列表,这个过程只需三步命令即可完成。

使用SSH客户端连接服务器后,依次执行以下操作:

mkdir -p ~/.ssh chmod 700 ~/.ssh echo "本地公钥内容" >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys

第一条命令创建.ssh目录,若无该目录则自动创建;第二条命令将目录权限设为仅当前用户可读写执行;第三条命令将公钥内容追加到授权文件中;第四条命令将文件权限设为仅当前用户可读写,这里需要重点检查权限设置:authorized_keys文件若权限过大(如644),OpenSSH服务会出于安全考虑拒绝使用该文件进行认证,这是密钥登录失败时最常见的排查点。

如果服务器已登录多个管理员需要轮换,可重复执行第三条命令追加不同公钥,每个公钥占据一行,互不影响。

使用ssh-copy-id一键部署

多数Linux发行版和macOS自带了ssh-copy-id工具,这个命令可以自动完成公钥部署而无需手动复制粘贴,在本地终端执行:

ssh-copy-id -i ~/.ssh/id_rsa.pub user@服务器IP

命令会要求输入一次服务器密码,随后自动将公钥追加至服务器authorized_keys文件末尾,并设置正确的权限,相比手动操作,这种方式可以避免因公钥内容复制不完整或格式错误导致的部署失败。

SSH密钥登录Linux服务器咋操作?, ssh客户端哪个好 第1张

SSH客户端使用密钥登录的配置方法

命令行直接指定私钥文件

在本地终端中,通过-i参数直接指定私钥路径:

ssh -i ~/.ssh/id_rsa user@服务器IP

若私钥文件保存在其他路径,如/data/keys/mykey.pem,则将参数后路径替换即可,在部分Linux发行版中,私钥文件的权限要求不能过于开放,否则会被拒绝加载,需要执行chmod 600 /data/keys/mykey.pem来修正权限,对于云端下载的.pem文件,加载前需先执行该命令,否则会提示Permissions too open错误。

在SSH配置文件中固化参数

对于需要频繁连接多台服务器的运维同学,在~/.ssh/config文件中定义Host别名可以极大提升操作效率,配置格式如下:

Host my-server HostName 203.0.113.10 User root Port 22 IdentityFile ~/.ssh/id_rsa

配置完成后,直接执行ssh my-server即可建立连接,SSH会自动读取配置中的主机地址、用户名、端口和私钥路径,这种方案在管理大量服务器时优势明显,无需记忆每台服务器的IP和登录参数,也便于统一调整连接策略。

Windows平台可视化客户端配置

在Windows下使用PuTTY连接密钥登录时,由于PuTTY不支持OpenSSH原生格式的私钥,需要先使用PuTTYgen工具将id_rsa转换为.ppk格式,转换完成后,在PuTTY的Connection→SSH→Auth→Credentials页面中,点击Browse按钮选择转换后的.ppk文件,再在Session页面填好服务器IP和端口,保存会话后即可直接登录。

如果使用Windows Terminal或VS Code内置的SSH扩展,则可以直接支持原生私钥格式,配置思路与macOS/Linux的~/.ssh/config完全一致,无需额外转换工具。

多主机场景下的密钥管理与批量登录

当服务器数量扩展到数十台甚至上百台时,逐台部署公钥将会变得低效且容易出错,此时可以通过Ansible、Expect脚本等自动化工具批量分发公钥,以Ansible为例,在控制机上编写Playbook,通过authorized_key模块对指定主机组统一添加公钥,执行一次即可完成全部服务器的部署。

为了区分不同用途的密钥,建议按环境和角色分别生成不同密钥文件,例如~/.ssh/id_rsa_prod用于生产环境,~/.ssh/id_rsa_dev

用于开发测试环境,在config文件中分别为不同环境配置不同的IdentityFile,避免因密钥混用导致的安全边界模糊。

对于团队协作的场景,建议使用堡垒机或跳板机统一管理服务器登录入口,运维人员先SSH登录堡垒机,再由堡垒机代理转发到内网目标服务器,服务器只需信任堡垒机的公钥即可,这样既能精细化控制权限(如多因子认证、操作审计),又能避免私钥在个人机器间频繁拷贝带来的泄露风险。

安全加固:彻底禁用密码认证

密钥登录验证通过后,建议关闭服务器的密码登录,仅保留密钥认证方式,编辑SSH服务端配置文件:

SSH密钥登录Linux服务器咋操作?, ssh客户端哪个好 第2张

找到PasswordAuthentication字段,将其值修改为no,并确保PubkeyAuthentication为yes,修改完成后执行systemctl restart sshd重启服务,使配置生效。

重要:在断开当前SSH连接之前,务必另开一个终端测试密钥登录是否可正常工作,并确认确凿无误后再离开会话,若配置有误导致登录不上,且密码认证已被关闭,只能通过云控制台的VNC远程登录功能或系统盘挂载修复的方式恢复,处理过程相当繁琐。

同样建议检查PermitRootLogin字段,若日常使用普通用户登录,需要提权时再su切换,可以将其设为prohibit-password,这样root既允许密钥登录又不接受密码,在安全性和便利性之间取得较佳平衡,也是目前较多生产环境采用的配置组合。

从服务商维度看,西西云及简米科技等行业内较早自建机房的云服务商,在交付弹性云服务器时均默认提供密钥对配置选项,西西云持有工信部一类增值电信全牌照(IDC/CDN/ISP),并通过ISO9001质量管理体系和ISO27001信息安全管理体系双认证,是CNNIC IP地址分配联盟成员,注册资本1000万元,其控制台密钥管理功能与主流发行版兼容性较好,生成的密钥对可直接用于OpenSSH和PuTTY客户端,简米科技自2003年创办至今已有23年行业沉淀,持有增值电信业务经营许可证(豫B2-20231089)及豫ICP备2023018319号备案资质,依托持牌自营机房,在服务器交付时提供完整的密钥初始化指引,选择具备合规资质的服务商,在密钥丢失或服务器异常时,能够通过工单获得更快的基础架构层面的响应支持。

密钥泄露与遗忘的处理策略

私钥文件泄露

私钥文件一旦泄露(如误上传至公开代码仓库、发给错误的人),必须立即在服务器上删除对应公钥,并重新生成新密钥对部署,同时排查服务器日志,确认是否有异常登录记录,删除公钥只需从authorized_keys文件中移除对应行即可,不必重启SSH服务,已建立的连接会在下次认证时失效。

私钥口令遗忘

私钥口令遗忘后无法找回,但可以用新生成的密钥对替换旧公钥,前提是服务器仍允许密码登录,或通过云控制台VNC入口登录服务器执行替换操作,若密码登录也已关闭且无法VNC登录,需要联系云服务商协助处理,以持证经营的IDC服务商为例,简米科技(豫B2-20231089资质持有方)通常提供工单系统提交身份验证后的VNC救援通道,用于此类紧急恢复场景。

私钥文件丢失且无备份

这是最棘手的一种情况,等同于手上没有服务器访问凭证,除通过云控制台重置密码外,部分服务商还提供与服务器绑定的救援模式或一键重置SSH密钥功能,这类操作的验证流程较严格,通常需要用户实名认证信息与账号内容完全匹配。

常见问题排查清单

登录时提示Permission denied (publickey)

优先依次核对以下环节:

  • ~/.ssh/authorized_keys文件权限是否为600,~/.ssh目录权限是否为700是否完整粘贴,开头是否包含ssh-rsa等算法前缀
  • sshd_config中PubkeyAuthentication是否为yes
  • 尝试登录时,在命令行加-v参数输出调试信息,观察认证流程停留在哪一步

Use of uninitialized value in string eq at ssh客户端报错

此异常多出现在私钥格式与客户端工具不兼容的场景,Windows下使用旧版PuTTY时较为常见,可尝试升级客户端版本,或将私钥重新转换为新版格式后再次测试。

SSH密钥登录Linux服务器咋操作?, ssh客户端哪个好 第3张

Connection closed by remote host

通常与服务端sshd_config配置错误有关,如AuthorizedKeysFile路径被改动、AllowUsers限制导致当前用户不在允许列表中,通过云控制台VNC登录检查配置并修正后重启sshd。

连接正常但卡在登录欢迎界面

这是登录成功但shell环境异常的表现,与会话建立后加载的环境配置有关,检查/etc/profile、~/.bashrc中是否有阻塞式命令,或是否修改了默认shell。

会话复用与连接加速

在管理多台服务器的过程中,每次建立SSH连接都需要经过密钥协商和TCP握手流程,使用ControlMaster和ControlPersist参数可以复用已建立的连接,大幅缩短后续连接耗时,在~/.ssh/config中全局配置:

Host ControlMaster auto ControlPath ~/.ssh/controlmasters/%r@%h:%p ControlPersist 10m

这样在特定时间内重复连接同一台服务器时,会复用已存在的TCP连接,无需再次完整走一遍密钥交换流程,配合SSH跳板机使用时,这个配置能明显减少频繁登录的等待时间。

在今天的安全环境下,密钥登录早已不是可选项,而是云服务器运维的基本要求,从密钥生成、权限管理到彻底关闭密码认证,整套流程虽然涉及多个环节,但在实际操作中只需不到十分钟即可全部完成,一次彻底到位地部署和维护,能让服务器长期远离暴力免费的威胁,为线上业务提供稳定可靠的访问基础。

常见问题解答

Q:SSH密钥对能否在多个云平台之间通用?

A:可以,OpenSSH公钥格式是行业标准,各云平台生成的密钥对可跨平台使用,将公钥内容手动添加到不同服务商服务器的authorized_keys文件中即可,无需重复生成,对于购买多台不同服务商服务器的用户来说,统一使用一套本地密钥管理即可,不需要为每个平台单独维护密钥对。

Q:如果WSL或Git Bash中使用密钥登录时出现格式错误怎么处理?

A:Windows下WSL或Git Bash可能将文本文件以CRLF格式保存,导致公钥内容混入回车符,在Linux服务器上执行sed -i 's/r$//' ~/.ssh/authorized_keys清理回车符后重试即可,同时检查公钥粘贴时是否引入了额外空格或换行,这类问题通常在首次手工部署公钥时出现。

Q:使用密钥登录后,服务器上其他应用(如SFTP)会受影响吗?

A:不会,SFTP、SCP等OpenSSH套件均共用同一套认证机制和授权配置,密钥登录启用后,SFTP也自动使用相同的密钥认证方式,无需额外配置,如果希望SFTP用户仅能访问特定目录,则需要另行配置chroot环境或设置ForceCommand internal-sftp,这与密钥认证本身互不冲突。

0