服务器与大带宽专家 · 持牌IDC/CDN/ISP服务商
简米科技官网JIANMI TECH
资讯 2026-08-26 更新于 2026-08-26 简米科技 4,374 字 10 分钟阅读

如何使用密钥对替代口令登录远程主机,配置方法详解?

导读用密钥对替代口令登录远程主机,核心方法是在本地生成一对公私钥,把公钥部署到服务器的~/.ssh/authorized_keys文件中,然后关闭服务器端的密码认证,即可实现更安全的免密登录,这套方案之所以被广泛推荐,是因为口令登录存在暴力破解和密码泄露的风险,而密钥对采用非对称加密,私钥不出本地机器,安全性高出几……

用密钥对替代口令登录远程主机,核心方法是在本地生成一对公私钥,把公钥部署到服务器的~/.ssh/authorized_keys文件中,然后关闭服务器端的密码认证,即可实现更安全的免密登录。

这套方案之所以被广泛推荐,是因为口令登录存在暴力破解和密码泄露的风险,而密钥对采用非对称加密,私钥不出本地机器,安全性高出几个量级,下面按实操路径,从生成密钥到细节排错,一步步讲清楚。

SSH密钥对登录配置:从生成到部署的完整步骤

整个配置流程分为本地生成密钥、上传公钥、修改服务端配置、验证登录四步,多数情况下,你只需要在本地终端执行几条命令就能完成。

第一步:在本地生成密钥对

无论你用Windows、macOS还是Linux,现代系统都自带ssh-keygen工具,打开终端,执行:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

参数说明:

  • -t rsa:指定密钥类型为RSA,兼容性最好,如果你追求更优性能,也可以换成-t ed25519,这是目前更先进的算法,密钥更短、速度更快,但需要服务端OpenSSH版本不低于6.5。
  • -b 4096:密钥长度,RSA密钥建议至少4096位,低于2048位已不被行业安全标准推荐。
  • -C:注释,通常填你的邮箱或机器名,方便识别。

执行后,系统会询问保存路径,默认是~/.ssh/id_rsa,直接回车即可,接着会让你设置passphrase(口令短语),这是给私钥再加的一把锁,建议设置,即使私钥文件被窃取,没有passphrase也无法使用。

生成完成后,~/.ssh目录下会出现两个文件:

  • id_rsa:私钥,绝对不要泄露,留在本地。
  • id_rsa.pub:公钥,可以安全地分发到任何需要登录的服务器。

第二步:将公钥部署到远程主机

有几种方式可以把公钥放到服务器的~/.ssh/authorized_keys文件里。

使用ssh-copy-id(最推荐)

Linux和macOS用户可直接执行:

ssh-copy-id -i ~/.ssh/id_rsa.pub user@server_ip

它会自动把公钥追加到服务器的authorized_keys文件中,并设置好文件权限,过程中会提示输入一次服务器密码,这是你最后一次用密码登录。

如何使用密钥对替代口令登录远程主机,配置方法详解?

手动追加

Windows用户没有ssh-copy-id,可以手动操作:

cat ~/.ssh/id_rsa.pub | ssh user@server_ip "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

这条命令的作用是:在服务器上创建.ssh目录、设置正确权限、把公钥追加进去,权限设置很关键,如果~/.sshauthorized_keys权限过于宽松(比如其他用户可写),sshd会拒绝使用该公钥。

第三步:修改sshd配置,关闭密码登录

在服务器上编辑SSH配置文件:

sudo vim /etc/ssh/sshd_config

找到并修改以下三项:

PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no

其中PasswordAuthentication no是关键,设置为no后,服务器不再接受密码登录,只能通过密钥认证,修改前请确认公钥已经部署成功,否则你会把自己锁在外面。

保存后重启服务:

sudo systemctl restart sshd

CentOS 6及以下用service sshd restart,Ubuntu用sudo service ssh restart

第四步:验证免密登录

从本地执行:

ssh user@server_ip

正常情况下会直接进入服务器,不再询问密码,如果你设置了passphrase,会要求输入passphrase,但这不会在网络中传输,安全性远高于密码。

不同客户端工具的密钥配置要点

实际工作中,很多人并不只用命令行,还会用到Xshell、WinSCP、FinalShell等工具,服务器免密登录怎么设置,在这些工具里略有差异,但核心逻辑一致。

Xshell配置密钥登录

  1. 打开Xshell,点击菜单栏的"工具"→"新建用户密钥生成向导",选择RSA或Ed25519,生成后保存公钥和私钥。
  2. 复制到服务器的authorized_keys文件中(方法同上)。
  3. 新建会话,在"用户身份验证"中选择"Public Key",然后选择刚才生成的私钥文件。
  4. 连接时如果提示输入私钥的passphrase,输入即可。

WinSCP配置密钥登录

WinSCP主要用于文件传输,但也支持密钥认证:

  1. 打开WinSCP,在登录窗口点击"高级"。
  2. 选择"SSH"→"身份验证",在"私钥文件"处选择你转换好的

    如何使用密钥对替代口令登录远程主机,配置方法详解?

    .ppk文件(WinSCP需要PuTTY格式的密钥,可以用PuTTYgen将OpenSSH格式私钥转换为ppk)。

  3. 返回登录窗口,密码留空,直接登录。

Windows环境的一个坑:很多Windows用户本地生成的密钥是OpenSSH格式,而WinSCP或PuTTY需要PuTTY格式,需要先转换,用PuTTYgen的"Load"加载私钥文件,再点击"Save private key"导出.ppk即可。

多台服务器的密钥管理

当你管理多台服务器时,可以创建~/.ssh/config文件来管理连接配置:

Host web-server
    HostName 192.168.1.100
    User root
    IdentityFile ~/.ssh/web_key
Host db-server
    HostName 192.168.1.101
    User admin
    IdentityFile ~/.ssh/db_key

配置完成后,直接输入ssh web-server就能登录,不需要记住IP、用户名和密钥文件的对应关系。

密钥对和密码哪个安全?常见误区和排错指南

这是一个老生常谈但值得反复强调的问题,密钥对的安全性建立在私钥不外泄的前提下,如果私钥本身被泄露,安全边界就会被突破,业内专家指出,密钥对配合passphrase使用,是目前远程登录场景下兼顾安全性与便捷性的最佳实践。

常见的登录失败原因

权限错误:这是最常见的问题,服务器上的~/.ssh目录权限应为700,authorized_keys文件权限应为600,如果权限不对,sshd会直接拒绝读取,执行:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

SELinux上下文问题:CentOS等使用SELinux的系统,可能因为上下文错误导致公钥认证失败,执行:

restorecon -Rv ~/.ssh

公钥格式错误:公钥必须是一行完整的ssh-rsa AAAA...格式,复制时不要断行或遗漏开头类型标识。

sshd_config配置冲突:如果配置文件中同时存在PasswordAuthentication yesno(比如在Match块中重复设置),后读取的配置生效,容易造成困惑,建议全局搜索确认没有重复项。

登录慢的优化

如果开启密钥登录后,每次连接要等十几秒,通常是因为sshd默认开启了DNS反向解析,在sshd_config中设置:

UseDNS no
GSSAPIAuthentication no

重启sshd后速度会明显提升。

密钥对的备份与应急恢复

如何使用密钥对替代口令登录远程主机,配置方法详解?

把密码认证关掉后,如果私钥丢失或损坏,你将无法登录服务器,这是需要提前规划的运维事项。

备份私钥:把私钥文件备份到加密的U盘或密码管理器中,注意,私钥是敏感数据,备份载体本身也要加密。

保留应急通道:建议在关闭密码认证前,开启服务器管理面板的VNC或Web Console功能(简米云、酷番云、华为云的云服务器后台都有),这样即使SSH完全进不去,也能通过网页终端登录。

定期轮换密钥:当有员工离职或怀疑私钥泄露时,应及时删除对应公钥、生成新密钥对并重新部署。

多公钥并存authorized_keys文件支持多行公钥,你可以同时放多个公钥,比如个人电脑和公司电脑各放一个,这样一台设备出问题不影响另一台登录。

密钥对登录配置常见问题

配置完密钥登录后,密码登录关闭了,但远程主机连接不上怎么办?

先检查服务器端的sshd服务是否正常运行,可以通过云服务商提供的VNC控制台登录检查,重点排查sshd_config中的PermitRootLogin配置,如果设为prohibit-password,root用户只允许密钥登录;设为yes则允许root密码登录,另外确认公钥确实在authorized_keys中且权限正确,以及本地的私钥路径是否被SSH客户端正确引用。

Windows下用ssh-keygen生成的密钥,服务器说格式不对怎么办?

Windows 10及以上版本的OpenSSH生成的默认密钥是OpenSSH格式,服务器端通常直接支持,如果遇到格式问题,检查公钥是否以ssh-rsassh-ed25519开头,且内容是单行,如果使用的是PuTTYgen生成的公钥,需要复制"OpenSSH authorized_keys"那栏的内容,而不是窗口顶部的"Public key for pasting into OpenSSH authorized_keys file"之外的格式。

密钥对能用在SFTP文件传输场景吗?

可以,SFTP基于SSH协议,使用密钥对登录后,FileZilla、WinSCP等工具都能直接使用密钥认证,配置方法与SSH登录一致,只需在客户端的SFTP设置中指定私钥文件即可,无需额外配置服务器端。

密钥对替代口令登录,本质上是一次性投入、长期收益的安全升级,配置过程不复杂,但需要细心处理好权限和文件格式这些细节,当你完成配置、关闭密码认证的那一刻起,暴力破解就基本与你无关了。

分享本文
本文为 简米科技官网 原创,已由运维技术专家审核。转载请注明来源:原文链接
售前咨询 服务热线 售后 邮箱