SSH 密钥免密登录教程 (Linux, macOS, Windows)
通过配置 SSH 密钥(Key-based authentication),你可以实现无需输入密码即可安全地登录到你的远程 Linux 服务器。这不仅方便,也比密码登录更安全。
本教程将分别介绍如何在 Linux/macOS 和 Windows 客户端上生成密钥并配置免密登录。
核心原理
SSH 密钥登录的核心是非对称加密。它包含两个密钥:
- 公钥 (Public Key):存放在远程服务器上,文件名通常是
id_rsa.pub。 - 私钥 (Private Key):存放在你自己的电脑(客户端)上,文件名通常是
id_rsa。私钥必须妥善保管,绝不能泄露。
当你尝试连接时,服务器会用你的公钥加密一段随机消息并发送给你。只有持有对应私钥的你才能解密这段消息,并将解密结果发回服务器进行验证。验证通过后,连接即建立。
步骤一:在客户端生成密钥对
这一步在你的本地电脑上操作。
在 Linux / macOS 上
Linux 和 macOS 系统通常都内置了 OpenSSH 工具。
打开你的终端(Terminal)。
运行以下命令来生成 RSA 密钥对:
bashssh-keygen -t rsa -C "your_email@example.com"-t rsa:指定密钥类型为 RSA。-C "your_email@example.com":一个注释,通常用于标识这个密钥属于谁,可以替换成你自己的邮箱。
接下来会有一系列提示:
Enter file in which to save the key (~/.ssh/id_rsa):直接按回车(Enter)即可,密钥会默认保存在用户主目录下的.ssh文件夹中。Enter passphrase (empty for no passphrase):输入一个密码来保护你的私钥。如果设置了,每次使用该私钥时都需要输入此密码。为了实现完全的“免密”登录,这里可以直接按回车,留空即可。Enter same passphrase again:再次输入密码确认,如果上一步留空,这里也直接回车。
成功后,你会在
~/.ssh/目录下看到两个新文件:id_rsa(私钥) 和id_rsa.pub(公钥)。
在 Windows 上
Windows 10/11 现在也内置了 OpenSSH 客户端,你可以使用 cmd 或 PowerShell。
打开
cmd或PowerShell。运行与 Linux/macOS 完全相同的命令:
bashssh-keygen -t rsa -C "your_email@example.com"同样,在提示时直接按回车,将密钥保存在默认位置(通常是
C:\Users\你的用户名\.ssh\),并选择是否设置私钥密码。
步骤二:将公钥上传到服务器
你需要将本地生成的公钥 (id_rsa.pub) 的内容,追加到远程服务器的 ~/.ssh/authorized_keys 文件中。
方法 A:使用 ssh-copy-id (推荐,仅限 Linux/macOS)
如果你是 Linux 或 macOS 用户,这是最简单、最推荐的方法。
ssh-copy-id your_user@your_server_ip根据提示输入一次你的服务器登录密码,ssh-copy-id 会自动完成所有公钥上传和权限设置工作。
方法 B:手动复制公钥
如果你使用的是 Windows,或者服务器环境特殊,可以手动操作。
在本地电脑上,查看并复制公钥文件的内容。
- Linux/macOS:
cat ~/.ssh/id_rsa.pub - Windows:
type C:\Users\你的用户名\.ssh\id_rsa.pub复制终端里输出的所有内容(以ssh-rsa开头)。
- Linux/macOS:
通过密码登录到你的远程服务器:
bashssh your_user@your_server_ip在服务器上,将公钥内容追加到
authorized_keys文件:首先,确保
.ssh目录存在:mkdir -p ~/.ssh然后,将你复制的公钥内容粘贴到命令中:
bashecho "你复制的公钥内容粘贴到这里" >> ~/.ssh/authorized_keys
步骤三:在服务器上设置正确的文件权限
这是非常关键的一步,如果权限不正确,SSH 服务会因为安全原因拒绝密钥登录。
在远程服务器上执行以下命令:
# .ssh 目录的权限必须是 700 (只有所有者能读、写、执行)
chmod 700 ~/.ssh
# authorized_keys 文件的权限必须是 600 (只有所有者能读、写)
chmod 600 ~/.ssh/authorized_keys提示:有些教程还会要求设置
~(用户主目录) 的权限为755。这是因为 SSH 检查非常严格,不希望主目录对其他用户有写权限。
步骤四:在客户端配置(可选但推荐)
为了方便管理多个服务器,你可以在本地电脑的 ~/.ssh/config 文件中为服务器设置别名。
在本地电脑上,编辑
~/.ssh/config文件(如果不存在则新建)。添加如下配置:
ssh-configHost my-server HostName your_server_ip User your_user # 指定使用哪个私钥文件进行连接 IdentityFile ~/.ssh/id_rsaHost my-server:为你服务器起一个别名。HostName:服务器的真实 IP 或域名。User:登录用户名。IdentityFile:私钥文件的路径。
重要:确保你的私钥文件 (
id_rsa) 权限是安全的。- Linux/macOS:
chmod 600 ~/.ssh/id_rsa - Windows: Windows 的文件权限系统不同,通常不需要手动
chmod。只要确保该文件只有你的账户可以访问即可。
- Linux/macOS:
配置完成后,你就可以通过别名直接登录了:
ssh my-server现在,它应该会直接登录成功,不再提示你输入密码。