SSH免密登录配置指南
每次 SSH 登录都要输入密码,确实很影响效率。解决这个问题的核心方法,就是配置SSH密钥认证。简单来说,就是让你的电脑(客户端)和远程服务器(服务端)通过一对“钥匙”来互相确认身份,从而省去手动输入密码的步骤。
针对你提到的“Mac远程登录Linux”和“Linux远程登录Mac”这两种情况,配置方法基本相同,但有几个关键点需要留意。下面是具体的操作步骤:
🚀 快速配置指南
整个配置过程,可以概括为“本地生成钥匙,把锁交给远程”两步。
情况一:从Mac登录到Linux (最常见)
这是最顺畅的场景,操作起来一气呵成。
在Mac上生成密钥对:打开Mac的终端,运行以下命令,然后一直按回车键接受默认设置即可。
ssh-keygen-trsa-b4096这会在你Mac的
~/.ssh/目录下生成一对文件:私钥 (id_rsa) 和公钥 (id_rsa.pub)。将公钥复制到Linux服务器:使用
ssh-copy-id命令,这是最方便的方法。它会自动把公钥添加到远程服务器的正确位置。ssh-copy-id 你的用户名@Linux服务器的IP地址根据提示,输入一次远程Linux服务器的登录密码。完成后,公钥就被妥当地存放在服务器上了。
测试登录:之后,你再从Mac通过
ssh登录这台Linux服务器,就不需要输入密码了。
情况二:从Linux登录到Mac
从Linux登录Mac,基本原理相同,但需要在Mac上进行一些设置,因为它默认不开启远程登录。
- 在Linux上生成密钥对:在Linux客户端执行和上面一样的命令。
ssh-keygen-trsa-b4096 - 在Mac上开启远程登录:这是关键一步。点击Mac左上角的苹果图标 →系统设置→通用→共享,打开“远程登录”的开关。这确保了Mac可以接受SSH连接。
- 将公钥复制到Mac:由于Mac默认没有
ssh-copy-id命令,需要手动操作。首先,在Linux上查看并复制公钥内容:
然后,手动登录到Mac:cat~/.ssh/id_rsa.pub
登录后,在Mac上执行以下命令,将公钥内容粘贴进去并设置好权限:ssh你的Mac用户名@Mac的IP地址
最后,退出Mac登录。mkdir-p~/.sshecho"这里粘贴你刚才复制的公钥内容">>~/.ssh/authorized_keyschmod700~/.sshchmod600~/.ssh/authorized_keys - 测试登录:现在,从Linux服务器尝试登录Mac,应该已经免密了。
🚨 Mac用户特别注意:解决重启后仍需密码的问题
如果你在Mac上配置完所有步骤后,发现一切正常,但每次重启Mac后,第一次SSH登录远程服务器又需要输入密码了,这很可能是Mac特有的“小脾气”。
这是因为macOS的ssh-agent(负责管理密钥的程序)默认不会将密钥永久保存在内存中。解决办法是,在将密钥添加到ssh-agent时,使用一个特殊的Mac专用参数:
# 将私钥添加到ssh-agent,并让其永久保存在Mac的钥匙串中ssh-add --apple-use-keychain ~/.ssh/id_rsa执行这个命令后,即使Mac重启,密钥信息也会被安全地保存在你的钥匙串里,ssh-agent可以随时读取,无需你再手动添加。
🔍 检查与故障排除
如果设置后仍然提示输入密码,可以按照以下几点快速排查:
- 检查权限:这是最常见的原因。在远程服务器上,确保
~/.ssh目录权限是700,~/.ssh/authorized_keys文件权限是600。 - 检查服务器配置:登录到远程服务器,检查SSH配置文件(
/etc/ssh/sshd_config),确保以下两行是启用的(没有#注释):
修改配置后,需要重启SSH服务才能生效。PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys
为了方便你日后查阅,这里有一个快速参考表:
| 场景 | 核心命令 | 关键步骤 |
|---|---|---|
| Mac → Linux | ssh-keygenssh-copy-id user@linux-server | 在Mac上生成密钥,使用ssh-copy-id上传公钥。 |
| Linux → Mac | ssh-keygen手动复制粘贴公钥 | 1.在Mac上开启“远程登录”共享。 2.手动将Linux的公钥添加到Mac的 ~/.ssh/authorized_keys。 |
| 解决Mac重启失效 | ssh-add --apple-use-keychain ~/.ssh/id_rsa | 将私钥添加到Mac的钥匙串中,实现永久保存。 |
