我想在 Linux 中禁用 SSH 的密码验证(针对所有用户)。我将PasswordAuthentication
sshd_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/