为什么要使用SSH密钥登录(免密登录)¶
在Linux服务器管理中,SSH(Secure Shell)是远程连接的常用工具。传统的密码登录虽然简单,但存在密码容易被暴力破解的风险。而SSH密钥登录(免密登录) 通过非对称加密的方式,安全性更高,且无需每次输入密码,使用更便捷。
准备工作¶
- 客户端:本地电脑(Windows/Linux/macOS),需安装SSH客户端(Linux/macOS默认自带,Windows需安装Git Bash或PuTTY等工具)。
- 服务器:目标Linux服务器(如CentOS、Ubuntu等),需确保已安装SSH服务(通常默认安装,可通过
ssh -V检查)。
步骤1:生成SSH密钥对(客户端)¶
在本地客户端生成一对密钥:私钥(仅本地保存,用于身份验证)和公钥(需上传到服务器)。
- 打开本地终端(Linux/macOS直接用Terminal,Windows用Git Bash),执行命令:
ssh-keygen -t rsa -b 4096
-t rsa:指定密钥类型为RSA。-b 4096:密钥长度(4096位更安全,也可省略,默认2048位)。
-
按提示操作:
- 询问“Enter file in which to save the key”时,直接回车(默认保存到~/.ssh/id_rsa,~表示用户家目录)。
- 询问“Enter passphrase”时,可留空(否则每次连接需输入私钥密码,建议初学者留空,后续用密码更方便)。 -
生成成功后,会在
~/.ssh目录下生成两个文件:
-id_rsa:私钥(需严格保密,权限建议设为600)。
-id_rsa.pub:公钥(可公开,用于上传到服务器)。
步骤2:将公钥复制到服务器¶
需将客户端的公钥内容上传到服务器的 ~/.ssh/authorized_keys 文件中(服务器用该文件存储允许登录的公钥)。
情况1:客户端为Linux/macOS(推荐,自动操作)¶
执行以下命令(替换 用户名 和 服务器IP):
ssh-copy-id -i ~/.ssh/id_rsa.pub 用户名@服务器IP
-i:指定公钥文件路径(默认~/.ssh/id_rsa.pub)。- 输入服务器密码后,公钥会自动复制到服务器的
~/.ssh/authorized_keys,并自动设置权限。
情况2:客户端为Windows(手动复制)¶
- 打开本地公钥文件
id_rsa.pub(用记事本或文本编辑器打开),复制全部内容。 - 登录服务器(通过密码),在终端执行:
mkdir -p ~/.ssh # 创建.ssh目录(若不存在)
cd ~/.ssh
echo "公钥内容" >> authorized_keys # 粘贴刚才复制的公钥
chmod 600 authorized_keys # 设置公钥文件权限(关键!否则SSH无法读取)
chmod 700 ~/.ssh # 设置.ssh目录权限(避免被其他用户修改)
步骤3:服务器端配置(确保允许密钥登录)¶
需确保服务器的SSH服务(sshd)允许公钥登录,并禁用密码登录(可选)。
- 编辑SSH配置文件
sshd_config:
sudo vim /etc/ssh/sshd_config
-
检查/修改以下关键选项(确保未被注释,且值为
yes):
-PubkeyAuthentication yes:允许公钥认证(默认开启)。
-AuthorizedKeysFile .ssh/authorized_keys:指定公钥文件路径(默认值正确,无需修改)。
- 若需禁用密码登录(仅用密钥登录),修改:PasswordAuthentication no(建议先保留yes,确保密码登录可用,后续再改)。 -
保存文件并重启SSH服务:
sudo systemctl restart sshd # CentOS/RHEL
# 或
sudo systemctl restart ssh # Ubuntu/Debian
步骤4:客户端连接测试(免密登录)¶
配置完成后,本地客户端无需密码即可连接服务器:
- 直接执行连接命令:
ssh 用户名@服务器IP
- 首次连接时,会提示“Are you sure you want to continue connecting (yes/no)?”,输入
yes确认。 - 无需再输入密码,直接登录成功!
常见问题及解决方法¶
-
权限错误:
- 服务器端authorized_keys权限应为600(chmod 600 ~/.ssh/authorized_keys),否则报错“Permission denied”。
- 客户端私钥id_rsa权限应为600(chmod 600 ~/.ssh/id_rsa),否则SSH会提示“Bad permissions on private key file”。 -
连接时仍需密码:
- 检查服务器端sshd_config中PubkeyAuthentication是否为yes。
- 确认公钥已正确复制到authorized_keys,且内容无多余空格/换行。 -
忘记私钥密码:
- 若生成密钥时设置了密码,需在连接时输入;若未设置(步骤1留空),则无密码。
- 若需重置密钥,删除~/.ssh/id_rsa和id_rsa.pub,重新执行步骤1生成。
总结¶
通过SSH密钥登录,既避免了密码泄露风险,又简化了登录流程。核心是“生成密钥对→上传公钥到服务器→配置服务器允许公钥登录”,重点注意文件权限和配置文件正确性。建议先在本地练习,再逐步迁移到生产环境。
提示:若需完全禁用密码登录,可在 sshd_config 中设 PasswordAuthentication no,并重启SSH服务。