这是关于 Centos7、SSH 远程登录设置以及 Mac 没有 root 用户的事实。
我已经问过这个问题好几次了,并得到了有关 ssh 工作原理的解释。其中一些很有趣。
目标是在 centos7 机器上以 root 用户进行无密码 ssh 登录。
我可以为非 root 用户执行正常设置,如下所示:
- 删除我的 ~/.ssh 文件夹。
- ssh-keygen(接受默认值以创建 ~/.ssh/id_rsa 私钥/公钥)。
- ssh-copy-id myuser@server (将公钥放入远程计算机上的authorized_keys 文件中)。
- 修改 sshd_config 以允许 Root 登录(是)、PublicKeyAuthentication(是)和 PasswordAuthorization(否)。
- 重新启动 sshd 并检查 sshd 上的状态。
- ssh myuser@server 无密码(使用密钥)成功
然后我尝试对 root 用户执行相同的操作:
- ssh-keygen -f root-key (将新的私钥和公钥放在 ~/.ssh/root-key 和 root-key.pub 中。-- 在 myuser ssh 文件夹中。)
- ssh-copy-id -i ~/.ssh/root-key root@server (此操作成功,我可以在远程服务器的根 ~/.ssh/authorized_keys 文件中找到公钥。)
- 因为我已经将 PasswordAuthentication 更改为 no,将 PublicKeyAuthentication 更改为 yes,所以无需密码即可工作: ssh -i ~/.ssh/root-key root@server
- 但是,这应该可以工作,但不能: ssh root@server 它会产生“权限错误(公共密钥)”。
在 mulberry 上进行了几周的研究后,我知道对 sshd_config 的任何更改都不会产生任何影响(我已经尝试了所有排列)。
看起来确实如此,将密钥复制到 root@server 的 ~/.ssh 文件夹的authorized_keys 文件不足以启用正常的无密码身份验证。
SSH 过程如下所示:流程描述和图表表明问题发生在“向服务器验证用户阶段”,此时客户端应将“root”公钥发送到服务器,以便与服务器根的authorized_keys 文件的内容进行比较。
事实上,有效的 CLI 语法似乎包含“-i ~/.ssh/root-key”短语,该短语显式转发 ssh-copy-id 步骤复制到服务器根的authorized_keys 文件的特定公钥。
但“正常”ssh 表示“ssh root@server”足以启动密钥传输和比较过程。
现在......在我之前的问题中,许多响应者想强调SSH“不关心”远程用户名是否与本地用户名不同,并且无论用户名、帐户如何,所有操作都会“正常”进行,等等。
但是,正如我在这些问题中试图指出的那样,根的公钥位于未命名为“root”的文件夹中,因此密钥的用户名字段不匹配,一些类似的“哑”妨碍的东西。
我最好的猜测是,SSH 的代码,至少在 MAC 上(尽管我在 Centos7 虚拟机上也遇到了同样的问题)默认使用首选 id_rsa.pub 密钥作为发送到远程服务器以匹配的密钥使用远程服务器的authorized_keys 文件中存在的ssh-copy-id'd root-key.pub。
所以...事实上,SSH 将允许名为“me”的本地用户连接到名为“you”的远程用户,这一事实实际上与问题或可能的解决方案无关。
现在的障碍是我正在尝试设置 TripleO 控制器来部署为 OpenStack 的 UnderCloud。 Ansible 脚本对于远程“root”和“stack”用户在 Ansible 角色运行期间拥有的权限非常特殊。他们不想在脚本化命令行上处理任何额外的参数,例如“-i ~/.ssh/root-key”。
所以这确实阻碍了我的进步。因此,欢迎任何有经验的帮助!