第 1 部分:无密码的 SSH 密钥

第 1 部分:无密码的 SSH 密钥

我需要配置一台机器,以便可以通过 SSH 远程自动安装软件。以下维基百科,我能够设置 SSH 密钥,以便我的用户无需密码即可访问机器,但是当我使用时我仍然需要手动输入密码sudo,而这显然不应该由自动化过程来执行。

尽管我的/etc/ssh/sshd_configPermitRootLogin yes,但我似乎无法以 root 身份登录,大概是因为它不是一个具有单独密码的“真实”帐户。

如何配置 SSH 密钥,以便进程可以在 Ubuntu 上以 root 身份远程登录?

答案1

第 1 部分:无密码的 SSH 密钥

要为 root 用户设置无密码 SSH 连接,您需要在服务器上拥有 root 访问权限。最简单的方法是暂时地允许 root 通过密码通过 ssh 登录。无论如何,您需要服务器上的 root 访问权限才能执行此操作。如果您没有服务器上的 root 访问权限,请联系服务器管理员寻求帮助。

在客户端上(你从哪里 ssh 过来)

首先创建一个没有密码的 ssh 密钥。我强烈建议你给它起一个名字,而不是使用默认的

ssh-keygen -f foo

-f 选项指定文件名,foo 是示例,您可以使用任何您想要的名称。

当提示您输入密码时,只需按回车键,您就会生成一个没有密码的密钥。

接下来,您需要将密钥传输到服务器。最简单的方法是使用ssh-copy-id。为此,您必须暂时允许 root 通过 ssh 进入服务器。

在服务器上(您 ssh 到的地方)

编辑/etc/ssh/sshd_config

sudo nano /etc/ssh/sshd_config

确保使用以下语法允许 root 登录

PasswordAuthentication yes
PermitRootLogin yes

重启服务器

sudo service ssh restart

设置 root 密码,使用强密码

sudo passwd

在客户端:

从客户端将密钥传输到服务器

ssh-copy-id -i ~/.ssh/foo root@server

将“foo”更改为密钥的名称,并在询问时输入服务器根密码。

测试密钥

ssh -i ~/.ssh/foo root@server

假设它有效,取消设置 root 密码并禁用密码登录。

在服务器上:

sudo passwd -l root

编辑/etc/ssh/sshd_config

sudo nano `/etc/ssh/sshd_config`

更改以下内容:

PasswordAuthentication no
PermitRootLogin without-password

重启服务器

sudo service ssh restart

在客户端(测试):

现在您应该能够使用密钥通过 ssh 进行登录而无需密码,并且您应该无法以任何没有密钥的用户身份通过​​ ssh 进行登录。

ssh -i ~/.ssh/foo root@server

第 2 部分:通过 sudo 运行命令而无需输入密码

您配置 sudo 以允许您无需密码即可运行命令。

这里有两个地方回答了这个问题:

在这两者中,我建议允许尽可能少的命令(第一个答案)而不是所有命令(第二个答案)。

答案2

你混淆了两件不同的事情:

无密码登录用于确保他人无法通过猜测您的密码远程登录您的系统。如果您可以 ssh username@machine 并无需密码即可连接,则表示设置正确,与此无关。

sudo用于允许普通用户帐户以超级用户权限执行某些操作。这要求用户输入密码。无论您是远程连接(通过无密码或受密码保护的 SSH)还是在计算机上本地连接,都会发生这种情况。您正在尝试设置sudo为不询问您的密码,这是不推荐的,但您可以通过以下答案了解如何做到这一点https://askubuntu.com/a/74083/6161

请未来阅读此答案的读者注意:

我的上述回答并没有回答原始海报的实际问题,它描述了你应该改为这样做。如果你真的想要允许远程连接直接连接到 root 帐户,您需要启用 root 帐户(请参阅下面的评论)。再说一遍,让我说不要允许远程登录您的根帐户。

答案3

问:使用无密码 SSH 以 root 用户身份登录远程主机(例如 ssh root@remotehost_ip)

A. 为了使用无密码 SSH 以 root 用户身份登录远程主机,请按照以下步骤操作。

第一步:
首先,您必须将本地用户的公钥与远程主机 root 用户的 authorized_keys 文件共享。有很多方法可以做到这一点,下面是一个例子。

https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys--2

或者您可以简单地将您的公钥内容复制粘贴到远程主机根用户的authorized_keys文件中。

第二步:
配置 ssh 以允许远程主机无密码登录。登录远程主机并编辑 /etc/ssh/sshd_config 文件,然后重新启动 ssh 服务。不要忘记注释掉“PermitRootLogin yes”。

#vim /etc/ssh/sshd_config
PermitRootLogin without-password
StrictModes no

#service ssh restart

注释掉#PermitRootLogin yes

第三步:
使用之前共享公钥的用户从本地机器测试连接。

$ssh root@remotehost_ip

答案4

PermitRootLogin 控制是否允许名为“root”的用户(准确地说:任何 UID 为 0 的用户)登录。如果您以 root 身份登录,则无需sudo执行特权任务。

另一方面,如果你想登录用户帐户并使用sudo无需密码,则必须配置 sudoers 文件,而无需摆弄/etc/ssh/sshd_config。请参阅如何让 Ubuntu 在第一次输入密码后永远记住密码

相关内容