CentOS 7/8 的免密免密登录配置,核心就三步:生成密钥对、登录把公钥拷到目标机、免密验证权限。登录别把这事想复杂了,免密八成的登录问题都出在权限和路径上。
我自己的免密服务器上,第一次配免密就栽了跟头。登录当时照着网上的免密教程,一条 ssh-copy-id 敲下去,登录提示成功,免密可一登录还是登录问密码。排查了半天,免密最后发现是登录目标机 ~/.ssh 目录权限是 777,sshd 直接拒绝信任公钥。免密Linux 这系统就这脾气,安全敏感的文件,权限太宽松反而坏事。
先说你本机要做的。检查 ~/.ssh 下有没有 id_rsa 和 id_rsa.pub,没有就执行 ssh-keygen -t rsa -b 4096,一路回车,别设 passphrase——设了的话,每次连接还得输密码,那免密就没意义了。生成完,公钥就是 id_rsa.pub 这个文件,里面是一长串字符。
接下来把公钥送到目标机。最简单粗暴的方法是 ssh-copy-id user@server_ip,它会自动把公钥追加到对方 ~/.ssh/authorized_keys 文件里。没有这个命令的话,手动来也行:cat ~/.ssh/id_rsa.pub | ssh user@server_ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"。这句命令的意思是,在远程机上创建 .ssh 目录,然后把你的公钥内容追加进去。
到这里,权限检查必须跟上。登录到目标机,执行:
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys 这两条命令把目录设为仅自己可读写执行,文件设为仅自己可读写。别小看这一步,StrictModes 默认开启,权限不对,服务器直接无视你的公钥。
还有个细节容易被忽略:SELinux 上下文。CentOS 默认开着 SELinux,如果你发现权限都对、authorized_keys 内容也没错,但就是登录失败,那就检查一下:restorecon -R -v ~/.ssh。这条命令重置 .ssh 目录的 SELinux 标签,有时候文件从别处拷贝过来,标签不对,sshd 就不认。
测试的时候,别直接断开当前连接。先另开一个终端窗口,执行 ssh user@server_ip,能直接进就说明成功了。如果还是要求密码,看日志:tail -f /var/log/secure,里面会明确告诉你认证失败的原因,比瞎猜高效得多。
我见过有人配完免密,高兴没两分钟,发现 sudo 还是要密码。这跟 ssh 免密是两码事,别混为一谈。ssh 免密只管登录那一下,sudo 的密码是另一套机制,想免 sudo 得改 /etc/sudoers,那是另一个话题了。
最后提醒一句:免密登录方便,但风险也大。你的私钥文件 id_rsa 一旦泄露,别人就能直接登录你的服务器。所以私钥权限务必是 600,别放在 U 盘、网盘这些地方。服务器上如果有多个人管理,建议给每个人单独生成密钥对,别共用一把钥匙——出了问题,至少知道是谁干的。