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

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

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

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

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

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

在客户端(您在哪里ssh FROM)

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

 ssh-keygen -f foo 

-f选项指定文件名,foo是一个示例,使用您希望的任何名称。

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

接下来,您需要将密钥传输到服务器。 最简单的方法是使用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”更改为密钥的名称,并在询问时输入服务器root密码。

测试密钥

 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以允许您在没有密码的情况下运行命令。

这在两个地方回答:

  • 如何在没有密码的情况下运行特定的sudo命令?
  • 如何在没有密码的情况下运行sudo命令?

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

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

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

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

未来读者请注意这个答案:

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

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

另一方面,如果您登录用户帐户并使用没有密码的sudo ,则必须配置sudoers文件,而不必使用/etc/ssh/sshd_config 。 请参阅第一次如何让Ubuntu永远记住密码

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

答:要使用无密码SSH以root用户身份登录远程主机,请按照以下步骤操作。

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

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

或者,您只需将公钥内容粘贴到远程主机root用户的authorized_keys文件即可。

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

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

注释掉#PermitRootLogin是的

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

 $ssh root@remotehost_ip