当前位置: 首页 > 知识库问答 >
问题:

如何选择远程机器使用的私钥来创建给我的本地服务器的known_hosts条目

苏培
2023-03-14

无密码ssh有两个组件,用户身份验证和服务器身份验证。我的用户身份验证很好。我已经创建了一个公共私钥对,并将我的公钥放在authorized_keys文件中。我的问题是关于我的本地机器从远程机器获得的公钥,该公钥用于验证我要连接到的远程机器:

如何选择进入本地服务器的已知_主机的远程服务器使用的私钥?

为了省钱,我不断地在云提供商上创建和删除删除虚拟机。不幸的是,取代删除虚拟机的新虚拟机生成了known_hosts中使用的新的公私密钥对

我不想手动输入ssh-keygen-R

请注意,这与之前的公私密钥问题有关,例如ssh远程主机标识已更改,但没有重复!我知道您可以使用ssh-keygen-R手动修复这个问题

图表:

--------------------                          -----------------------
| My machine       |                          |  Remote Machine     |
| - - - - - - - - -|                          | - - - - - - - - - - |
| Host Public Key  |<---host-authentication---| ** Host Private Key |
| (known_hosts)    |                          |                     |
| - - - - - - - - -|                          | - - - - - - - - - - |
| User Private Key |----user-authentication-->| User Public Key     |
|                  |                          | (authorized_hosts)  |
--------------------                          -----------------------

**:如何更改此部分?


共有2个答案

阳兴文
2023-03-14

我最后用(这是不安全的)黑客攻击了我的脚本:

ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null <hostname>

-o StrictHostKeyChecking=否:将接受连接到新主机

-o UserKnownHostsFile=/dev/null:将新主机保存到 /dev/null所以每次ssh时,它都是一个新主机

这最初是在中提出的https://askubuntu.com/questions/87449/how-to-disable-strict-host-key-checking-in-ssh来解决类似的问题。

张昊穹
2023-03-14

META:这实际上是SysOps而不是编程,可能属于serverfault或superuser,或者unix。SX。

您没有说明您的虚拟机正在使用哪个SSH服务器,尽管我预计云提供商可能会使用OpenSSH来避免可能的许可证问题。如果这个猜测是正确的,sshd通常将其配置和密钥文件放在/etc/ssh中,尽管这可以更改。请参阅任何系统或Web上FILES下的手册页,根据SO约定复制在此处:

/这些文件包含主机密钥的私有部分。这些文件应仅由root所有,仅由root可读,其他人不可访问。请注意,如果这些文件是组/全局可访问的,则sshd不会启动。

/etc/ssh/ssh\u host\u dsa\u密钥。pub
/etc/ssh/ssh\u host\u ecdsa\u密钥。pub
/etc/ssh/ssh\u host\u ed25519\u密钥。pub
/etc/ssh/ssh\u host\u rsa\u密钥。pub这些文件包含主机密钥的公共部分。这些文件应该是全局可读的,但只能由root用户写入。其内容应与各自的私人部分相匹配。这些文件实际上没有用于任何用途;它们是为方便用户而提供的,因此可以将其内容复制到已知的主机文件中。这些文件是使用ssh-keygen(1)创建的。

对于协议v2,主机最多可以有四个密钥对:RSA、DSA、ECDSA和ED25519。非常旧的版本只支持RSA和DSA。旧版本不支持ED25519。新版本默认不使用DSA,但确实支持它。代码仍然支持带有ssh_host_key[. pub](名称中没有算法)的协议v1,但v1已经过时和损坏,您不应该使用它。

手册页并没有这样说,我可以看到,但实际上几年来,OpenSSH服务器通常会自动生成主机密钥,如果它们在代码或包安装/启动脚本中丢失,那么只删除您不想要的密钥类型可能行不通。您的客户端可能能够控制主机使用哪些受支持的公钥算法;有关OpenSSH的最新版本,请参阅HostKeyAlgorithms下ssh\u配置的手册页。否则,请上载所有支持的密钥类型,或上载所需的密钥类型,并调整sshd\u config文件以不使用其他密钥类型,或为其他密钥类型创建无效但不可写入和不可删除的文件,以便sshd无法使用它们。

旁白:我会颠倒你的图表。主机身份验证始终首先出现,实际上始终是公钥(标准中有其他选项,但没有使用);客户端身份验证通常是第二个,但可以跳过,可以是公钥或密码。

 类似资料:
  • 问题内容: 我已经使用Xampp和JetBrain WebStorm运行AngularJS项目。但是它复杂且性能低下,还有其他方法可以运行AngularJS项目吗? 问题答案: 如果您正在运行node.js,则http-server超级简单。 到您的项目文件夹中 是打开浏览器到页面。运行以查看其他选项,例如更改端口号 没有吗? 这些其他的俏皮话,如果你没有可能会更容易/安装。 例如,大多数系统上都

  • 我们最近将一些数据移植到MongoDB,现在正在考虑运行日常备份,最好是从cron作业,并将其中一个备份恢复到辅助mongo数据库。 我们的系统设置如下: 服务器1:开发mongo数据库 服务器2:两个mongo数据库,一个用于暂存数据,一个用于生产 服务器3:是我们运行所有cron作业/批处理脚本的地方 (我尝试了将用户名和密码连接到主机,但没有将用户名和密码连接到主机) 我收到以下信息: Mo

  • 问题内容: 我正在尝试建立一个PHP网站,并且想要测试我的PHP文件而不将其上传到主机。在上载它们之前,基本上在我自己的机器上对其进行测试。我怎么做? 问题答案: 安装并运行XAMPP:http : //www.apachefriends.org/en/xampp.html

  • 我无法使用某些连接字符串从C#.NET代码连接到远程PostgreSQL服务器。(我的连接字符串包含基本信息,如主机地址,端口,用户名,密码,数据库名)。 我的连接字符串: 注意:我使用的是.NET程序集 我得到的错误是:

  • 我正在尝试从Dockerfile构建一个docker镜像,需要采取的步骤之一是安装一个依赖项,该依赖项只能通过私有Gitlab存储库获得。这意味着容器需要访问SSH密钥才能进行克隆。我知道这不是最安全的方法,但这只是一个中间容器,一旦运行应用程序所需的所有组件都到位,它将被移除。 问题是,无论我怎么尝试,我都无法让docker中的ssh代理建立连接。我得到: 如果我尝试简单地克隆存储库而不运行,也

  • 1) 我在linux机器上远程运行了我的服务器程序。 2) 然后,我尝试从本地windows机器连接探查器GUI。我拿到配置了。来自服务器的xml由JProfiler生成,并通过GUI导入。当我尝试连接时,我会一直处于“连接状态”。 我能够远程登录到Linux机器的特定端口8849。 有趣的是,当我在Linux机器上关闭服务器时,GUI上的“连接状态”对话框也被关闭。它显示了这个信息。“使用了本机