我需要配置一台机器,以便可以通过 SSH 远程自动安装软件。以下维基百科,我能够设置 SSH 密钥,以便我的用户无需密码即可访问机器,但是当我使用时我仍然需要手动输入密码sudo
,而这显然不应该由自动化过程来执行。
尽管我的/etc/ssh/sshd_config
有PermitRootLogin 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 在第一次输入密码后永远记住密码