如何禁用 SSH 的密码验证

如何禁用 SSH 的密码验证

我想在 Linux 中禁用 SSH 的密码验证(针对所有用户)。我将PasswordAuthenticationsshd_config 文件设置为否,但这样我就不能再使用私钥登录了。

附言:我尝试登录时指定了我的私钥文件。

答案1

在禁用密码验证之前,您需要配置公钥验证并确保您正在使用它。如果您尚未这样做,您可以使用 生成密钥对ssh-keygen

密钥对由文件名末尾的私钥和公钥组成.pub。公钥由一行组成,其中包含类型、公钥和注释。我发现编辑注释以包含密钥对生成的日期很有用,因为默认注释中不包含该日期。

您需要.ssh/authorized_keys在您登录的帐户中输入这一行。

以后当您使用 ssh 连接到服务器时,系统将不再要求您输入密码来登录。如果您在创建密钥时输入了密码,系统可能会要求您输入密钥的密码。如果您不想每次登录时都被要求输入密码,请使用ssh-agent

在服务器上,您可以编辑/etc/ssh/sshd_config找到该PasswordAuthentication行并使其成为:

PasswordAuthentication no

PasswordAuthentication如果文件中没有行,则需要添加一行。可能有注释告诉您默认值是什么。您可以删除#该行以使其不再是注释,也可以PasswordAuthentication在注释后添加一行。

要使更改生效,请运行

service ssh reload

在服务器上以 root 身份运行。此命令在 Ubuntu 上可能因发行版的不同而略有不同。我建议在会话中运行该命令,screen这样reload即使在运行该命令时失去与服务器的连接,该命令也会完成。

完成更改后,打开一个新窗口以启动另一个 ssh 连接,以验证连接是否按预期工作。此步骤很重要,因为如果您意外锁定自己无法访问服务器上的 root shell,则您打开的 shell 会为您提供最后一次解决问题的机会。

答案2

在服务器上禁用 SSH 密码验证,也禁用以 root 身份登录。

笔记执行此操作之前,请确保服务器上有一个拥有密码的用户,否则您将被锁定在服务器之外。

$ vim /etc/ssh/sshd_config

编辑/添加以下行

  • PermitRootLogin 否
  • 密码验证否
  • UsePAM 否
  • 使用登錄號

执行命令

$ service ssh restart

在客户端上创建新的 SSH 密钥(示例)

cd ~/.ssh    
ssh-keygen -t rsa -b 4096 -C server1 -f server1

将 SSH 密钥复制到服务器

ssh-copy-id -i server1.pub username@server-ip

使用新密钥连接服务器

vim ~/.ssh/config

添加以下行

Host ip-of-server
  User yourUsername
  IdentifyFile /home/yourUsername/.ssh/server1

连接到服务器

ssh server-ip

答案3

检查您要登录的服务器上的文件和文件夹权限。如果权限太松,则无法工作。

chmod 700 ~/.ssh
chmod 600 ~/.ssh/

相关内容