在 DigitalOcean 上配置 SSH 密钥登录并禁用密码登录,首先需要在本机生成 SSH 密钥对(推荐使用 ed25519 或 RSA 算法),然后将公钥上传至 DigitalOcean 控制台的 SSH Keys 页面或在创建 Droplet 时直接添加。服务器创建后,登录服务器编辑 `/etc/ssh/sshd_config` 配置文件,设置 `PubkeyAuthentication yes` 和 `PasswordAuthentication no`,同时建议设置 `PermitRootLogin no` 以增强安全性。修改完成后需验证配置语法并重启 SSH 服务。务必在禁用密码前确保公钥登录已成功测试,避免被锁定在服务器之外。此过程能显著提升服务器抵御暴力破解的能力。
如何配置 Linux 服务器 SSH 公钥认证并禁用密码登录实战
直接配置 SSH 公钥认证并关闭密码登录可显著提升服务器安全性,核心步骤包括生成密钥对、上传公钥、修改 sshd_config 禁用密码认证并重启服务,每步需严格注意权限与路径。直接配置 SSH 公钥认证并关闭密码登录,能显著提升服务器安全性。核心是生成密钥对、正确部署公钥、修改 SSH 服务配置并重启生效——操作本身不难,但每一步的权限和路径细节容易出错。生成并上传 SSH 密钥对 在本地终端 (Linux/macOS) 或 WSL(Windows) 中执行:ssh-keygen -t ed25519 -C "your_email@example.com" 按回车接受默认路径 (~/.ssh/id_ed25519),可选设密钥口令增强本地保护。生成后,用 ssh-copy-id 一键上传公钥到服务器 (推荐): ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip 若无法使用该命令,可手动复制 cat ~/.ssh/id_ed25519.pub 输出内容,在服务器上追加到~/.ssh/authorized_keys 文件末尾 (注意:目标用户家目录、.ssh 目录及 authorized_keys 文件权限必须严格): chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys chown -R $USER:$USER ~/.ssh 修改 SSH 服务配置禁用密码登录 登录服务器,编辑 SSH 主配置文件:sudo nano /etc/ssh/sshd_config 确保以下参数明确启用或禁用 (取消注释并修改值): PubkeyAuthentication yes(允许公钥认证) PasswordAuthentication no(彻底禁用密码登录) PermitRootLogin no(禁止 root 直接登录,更安全) ChallengeResponseAuthentication no(关闭其他交互式认证) 保存退出后,务必先验证新配置语法是否正确:sudo sshd -t 无报错再重启服务:sudo systemctl restart sshd 验证与故障排查要点 新开一个终端窗口,用原用户尝试 SSH 连接:ssh -i ~/.ssh/id_ed25519 user@server_ip 如成功登录,说明公钥已生效;此时再开一个窗口尝试密码登录 (如 ssh user@server_ip),应被拒绝。常见问题处理:连接被拒或"Permission denied (publickey)":检查 authorized_keys 权限、SSH 服务日志 (sudo journalctl -u sshd -n 50 --no-pager) 禁用密码后无法登录:确保已有公钥能正常登录,且未误关所有登录通道;建议保留一个已登录会话,等新连接验证成功后再重启 sshd SELinux 启用时可能拦截:临时设为 permissive 模式测试 (sudo setenforce 0),确认是 SELinux 导致则恢复并调整上下文 (restorecon -Rv ~/.ssh)
如何为 DigitalOcean 上的服务器配置 SSH 密钥
本文介绍了一种在 macOS 和 Linux 环境下使用 SSH 密钥而非密码访问服务器的方法,包括创建 RSA 密钥对、复制 SSH 密钥到服务器、锁定 root SSH 访问等步骤。本指南适用于 mac OS 和 Linux,windows 用户请绕道。通常,当你启动 DigitalOcean droplets 时,只要过程完成,你会收到一封电子邮件,让你知道 droplets 的 IP 地址和密码。尽管此电子邮件非常方便,但是如果可以无需电子邮件即可获得访问服务器的更安全 (更快) 的方式那肯定就再好不过了。这可以通过设置 SSH 密钥来完成。SSH 密钥是计算机与服务器之间的密钥对,如果服务器在您登录的计算机上看到匹配的密钥,则允许服务器进行连接。尽管密码最终可能通过强力攻击破解,但 SSH 密钥几乎不可能通过强力破解。您可以通过将计算机的 SSH 密钥添加到控制面板,使用已经在其上设置的 SSH 密钥创建新的 DigitalOcean droplets。第一步 - 创建 RSA 密钥对 第一步是在客户机上创建密钥对 (一般就是本机): ssh-keygen 第二步 - 存储密钥和密码 一旦输入了 Gen Key 命令,你将会得到更多的问题:输入保存密钥的文件 (/demo/.ssh/id_rsa): 可以在这里按回车,将文件保存到用户主目录 (在这种情况下,我的示例用户名为 demo)。输入密码 (没有密码时为空): 这是用于生成 SSH 的密码,推荐用一个好记的密码,整个密钥生成过程如下所示:ssh-keygen 生成公钥/私钥 rsa 密钥对。输入保存密钥的文件 (/demo/.ssh/id_rsa): 输入密码 (没有密码时为空): 再次输入相同的密码:您的身份已保存在/demo/.ssh/id_rsa 中。您的公钥已保存在/demo/.ssh/id_rsa.pub 中。关键指纹是:4a:dd:0a:c6:35:4e:3f:ed:27:38:8c:74:44:4d:93:67 demo @ a 密钥的 randomart 图像是:+ - [RSA 2048] ---- + | .oo。| |。oE | | +。o | |。= =。| | = S =。| | o + = + | |。o + o。| |。o | | | + ----------------- + 公钥现在位于/demo/.ssh/id_rsa.pub,私钥 (标识) 现在位于/demo/.ssh/id_rsa 中 第三步 - 复制 SSH 密钥 一旦设置了 SSH 密钥,就可以将其复制到控制面板中。打开 SSH 页面,然后单击创建新的 SSH 密钥按钮。应该出现一个弹出窗口 小方框中写入创建名称 (例如“家用计算机”) 大方框中复制并粘贴在步骤 2 中创建的公钥。以下命令可以得到密钥:cat〜/.ssh /id_rsa.pub 点击保存。第四步 - 打开一个新的服务器 前面的步骤解释了如何使用预先安装的 SSH 密钥设置服务器。但是,不能使用控制面板将按键添加到已创建的 droplets。
【转】Linux 配置使用 SSH Key 登录并禁用 root 密码登录
Linux 系统大多说都支持 OpenSSH,生成公钥、私钥的最好用 ssh-keygen 命令,如果用 putty 自带的 PUTTYGEN.EXE 生成会不兼容 OpenSSH,从而会导致登录时出现 server refused our key 错误。1、root 用户登陆后,运行以下第一句指令,其他根据提示进行输入:ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): 建议直接回车使用默认路径 Created directory '/root/.ssh' Enter passphrase (empty for no passphrase): 输入密码短语 (留空则直接回车) Enter same passphrase again: 重复密码短语 Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: 05:71:53:92:96:ba:53:20:55:15:7e:5d:59:85:32:e4 root@test The key's randomart image is: +--[ RSA 2048]----+ | o o .. | | . o oo.+ . | | o.+ = | | o | | o S | | . | | | | | | | +--------------------+ 此时在/root/.ssh/目录下生成了 2 个文件,id_rsa 为私钥,id_rsa.pub 为公钥。私钥自己下载到本地电脑妥善保存 (丢了服务器可就没法再登陆了),为安全,建议删除服务器端的私钥。公钥则可以任意公开。2、使用以下命令将公钥导入到 VPS: cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys 3、修改 SSH 的配置文件/etc/ssh/sshd_config : #RSAAuthentication yes #PubkeyAuthentication yes #AuthorizedKeysFile .ssh/authorized_keys 去调上面 3 行前面的#,保存后重启 SSH 服务。service sshd restart 至此你的 DigitalOceanVPS 已经支持使用 SSH 私钥证书登录。在你使用 SSH Key 登录验证成功后,还是为了安全,建议你关闭 root 用户使用密码登陆,关闭的方法如下:修改 SSH 的配置文件/etc/ssh/sshd_config,找到下面 1 行:PasswordAuthentication yes 修改为:PasswordAuthentication no 保存后重启 SSH 服务。
[叶子] 记一次给自己服务器启用公钥私钥登录并禁用密码登录 ssh
于是就开始着手准备启用公钥认证的登录方式,先创建一对 2048 位的使用 rsa 加密方式的密钥,接着就提示设置密钥的密码,要求输入两次以便确认,完事之后就会显示出当前的服务器密钥 创建密钥 (公钥 + 私钥) 接下来就是给密钥文件设置权限,按照 openssh 的要求,这些目录和文件的权限必须是这些,没啥解释,设置完权限之后将公钥内容导入到 ssh 用于认证的文件中,此处我的密钥文件的文件名是"root_rsa_2048",公钥的文件名就是在私钥的文件名后面加上".pub",如果此处提示没有"authorized_keys"文件的话就自行用 touch 命令创建一个,或者先导入公钥之后再执行设置权限 设置权限并导入公钥 在完成上面的操作之后编辑 ssh 服务端的配置文件 使用 vim 编辑 ssh 服务端配置文件 在配置文件中找到"PubkeyAuthentication",并将这项设置启用,然后修改为 yes 在配置文件中查找并修改"PubkeyAuthentication"的值为 yes 找到"AuthorizedKeysFile",看看是不是图中这个值,如果是的话就不管,不是的话就改成图中这样 在配置文件中查找并检查"AuthorizedKeysFile"的值 接着找到"PasswordAuthentication",将它的值改为"no"(注意:此操作将禁用密码验证,也就是无法再使用密码登录了) 在配置文件中查找并修改"PasswordAuthentication"的值为 no 接下来在配置文件的底部加上"RSAAuthentication"并设置为"yes",最后再检查一遍,配置文件没有错误的话就报错然后退出编辑器 在配置文件中添加"RSAAuthentication"并将其的值设置为 yes 然后挑选一个自己趁手的方式,从服务器上下载私钥到本地 下载私钥文件 然后在你的 ssh 客户端上导入私钥,我这里用的是系统自带的 openssh,使用以下命令导入 ssh 私钥:代码语言:javascript AI 代码解释 三条命令,前两条需要管理员权限,用途是将"ssh-agent"服务设置为自动启动,然后手动启动这个服务,最后那一条是导入私钥文件。经测试,使用私钥登录服务器必须启动 ssh-agent 服务,不然会无法登录。导入的时候会提示你输入你在创建的时候设置的密码,如果输入正确,会提示成功添加。导入私钥文件 在确定你本地环境准备完毕之后就到服务器上面重启 sshd 服务,重启服务的命令不同系统各不相同,Redhat 系的 Linux 系统是用"systemctl restart xxx"重启,Debian 系的是"service xxx restart"("xxx"是要操作的服务的名称)
FAQ
问:禁用密码登录后无法连接怎么办?
答:确保在禁用密码前已测试公钥登录成功,并保留一个已登录会话直到新连接验证成功。
问:是否建议禁用 Root 登录?
答:建议设置 PermitRootLogin no,创建普通用户并通过 sudo 提权,以增加安全性。
问:SSH 密钥权限设置错误会有什么影响?
答:权限过宽会导致 SSH 服务拒绝使用密钥,~/.ssh 目录应为 700,authorized_keys 应为 600。