如何为 root 用户设置无密码 SSH 访问

Cer*_*rin 49 ssh

我需要配置一台机器,以便可以通过 SSH 远程自动安装软件。按照wiki,我能够设置 SSH 密钥,这样我的用户就可以在没有密码的情况下访问机器,但是我在使用时仍然需要手动输入我的密码sudo,这显然不应该是自动化过程。

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

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

Ash*_*ema 68

第 1 部分:没有密码的 SSH 密钥

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

在客户端(从哪里 ssh 到)

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

ssh-keygen -f foo
Run Code Online (Sandbox Code Playgroud)

-f 选项指定一个文件名,foo 是一个例子,使用你想要的任何名称。

当系统提示您输入密码时,只需按 Enter 键,您将生成一个没有密码的密钥。

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

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

编辑 /etc/ssh/sshd_config

sudo nano /etc/ssh/sshd_config
Run Code Online (Sandbox Code Playgroud)

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

PasswordAuthentication yes
PermitRootLogin yes
Run Code Online (Sandbox Code Playgroud)

重启服务器

sudo service ssh restart
Run Code Online (Sandbox Code Playgroud)

设置root密码,使用强密码

sudo passwd
Run Code Online (Sandbox Code Playgroud)

在客户端:

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

ssh-copy-id -i ~/.ssh/foo root@server
Run Code Online (Sandbox Code Playgroud)

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

测试密钥

ssh -i ~/.ssh/foo root@server
Run Code Online (Sandbox Code Playgroud)

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

在服务器上:

sudo passwd -l root
Run Code Online (Sandbox Code Playgroud)

编辑 /etc/ssh/sshd_config

sudo nano `/etc/ssh/sshd_config`
Run Code Online (Sandbox Code Playgroud)

更改以下内容:

PasswordAuthentication no
PermitRootLogin without-password
Run Code Online (Sandbox Code Playgroud)

重启服务器

sudo service ssh restart
Run Code Online (Sandbox Code Playgroud)

在客户端(测试):

您现在应该可以在没有密码的情况下使用您的密钥进行 ssh 登录,并且您应该无法以任何没有密钥的用户身份登录。

ssh -i ~/.ssh/foo root@server
Run Code Online (Sandbox Code Playgroud)

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

您将 sudo 配置为允许您在没有密码的情况下运行命令。

这在两个地方回答:

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


Dav*_*ill 8

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

无密码日志用于确保人们无法通过猜测您的密码远程登录您的系统。如果您可以 ssh username@machine 并在没有密码的情况下进行连接,则说明设置正确,与此无关。

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

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

我上面的回答没有回答原始海报的实际问题,它描述了你该做什么。如果您真的想允许直接远程连接到 root 帐户,则需要启用 root 帐户(请参阅下面我的评论)。再次,让我说不要远程允许远程登录插件到你的root帐户。

  • 你误会我了。我知道 SSH 和 sudo 之间的区别。问题是我无法使用 root@machine ssh。使用我的“普通”帐户并将其添加到我的 sudoers 文件中会完成同样的事情,但我试图仅通过 SSH 来完成。这在基于 Redhat 的发行版中是可能的。我认为您的回答意味着这在基于 Debian 的发行版中是不可能的。 (2认同)
  • sudo 提供更细粒度的控制。例如,您可以允许非 root 用户以 root 身份运行 apt 而不提供密码,但不允许任意命令。由于您的目标是自动化软件安装,您应该使用最低权限的解决方案来实现您的目标。 (2认同)

小智 7

Q. 使用无密码 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

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

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

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

#service ssh restart
Run Code Online (Sandbox Code Playgroud)

注释掉 #PermitRootLogin 是

第 3 步:
使用先前共享公钥的用户从本地计算机测试您的连接。

$ssh root@remotehost_ip
Run Code Online (Sandbox Code Playgroud)

  • 事实证明 StrictModes no 在某些系统上很重要 (3认同)

归档时间:

查看次数:

236709 次

最近记录:

7 年,2 月 前