用密钥对替代口令登录远程主机,核心方法是在本地生成一对公私钥,把公钥部署到服务器的~/.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目录、设置正确权限、把公钥追加进去,权限设置很关键,如果~/.ssh或authorized_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配置密钥登录
- 打开Xshell,点击菜单栏的"工具"→"新建用户密钥生成向导",选择RSA或Ed25519,生成后保存公钥和私钥。
- 复制到服务器的
authorized_keys文件中(方法同上)。 - 新建会话,在"用户身份验证"中选择"Public Key",然后选择刚才生成的私钥文件。
- 连接时如果提示输入私钥的passphrase,输入即可。
WinSCP配置密钥登录
WinSCP主要用于文件传输,但也支持密钥认证:
- 打开WinSCP,在登录窗口点击"高级"。
- 选择"SSH"→"身份验证",在"私钥文件"处选择你转换好的
文件(WinSCP需要PuTTY格式的密钥,可以用PuTTYgen将OpenSSH格式私钥转换为ppk)。
.ppk
- 返回登录窗口,密码留空,直接登录。
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 yes和no(比如在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-rsa或ssh-ed25519开头,且内容是单行,如果使用的是PuTTYgen生成的公钥,需要复制"OpenSSH authorized_keys"那栏的内容,而不是窗口顶部的"Public key for pasting into OpenSSH authorized_keys file"之外的格式。
密钥对能用在SFTP文件传输场景吗?
可以,SFTP基于SSH协议,使用密钥对登录后,FileZilla、WinSCP等工具都能直接使用密钥认证,配置方法与SSH登录一致,只需在客户端的SFTP设置中指定私钥文件即可,无需额外配置服务器端。
密钥对替代口令登录,本质上是一次性投入、长期收益的安全升级,配置过程不复杂,但需要细心处理好权限和文件格式这些细节,当你完成配置、关闭密码认证的那一刻起,暴力破解就基本与你无关了。