【问题标题】:Prevent known_hosts Authenticity Check防止 known_hosts 真实性检查
【发布时间】:2014-12-11 20:29:27
【问题描述】:

我正在使用 phpseclib 连接到刚刚创建的服务器。它永远不会出现在~/.ssh/known_hosts 中。为了防止发生脚本超时,我想绕过警告:

The authenticity of host 'xxx.xxx.xxx.xxx' can't be established.
RSA key fingerprint is xxx.
Are you sure you want to continue connecting (yes/no)?

我知道可以将标志传递给 OpenSSH 以禁用此真实性检查:

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@xxx.xxx.xxx.xxx

这是一个已经进入 phpseclib 的功能吗?

【问题讨论】:

    标签: php ssh phpseclib


    【解决方案1】:

    phpseclib 不 - 也不能 - 验证主机的真实性。

    phpseclib 的作用是让您通过$ssh->getServerPublicHostKey() 检索服务器公共主机密钥。您可以在登录服务器之前执行此操作,并且可以将密钥保存在某处,无论是在数据库中还是在文件系统中,并在以后的连接中检查保存的密钥。

    我的意思是,无论如何,phpseclib 会将服务器公共主机密钥保存在哪里?它不知道您是否有数据库访问权限。它不知道是否有任何文件系统是可写的。我想它可以使用 tempnam() 但是,就像你说的,它在初始连接上做了什么?假设您通过 Web 浏览器(而不是 CLI)运行它并显示一个 js 弹出窗口?而且 tempnam() 无论如何都不是永久性的。它是否应该在每次 /tmp 被文件系统删除时重新提示您?

    【讨论】:

    • 我知道它不会尝试验证主机的真实性,但我的 CLI 脚本为什么显示验证真实性警告?
    • 从头开始,其他东西正在调用检查!
    • 这一定已经改变了,因为我当前的问题是来自 phpseclib 的 Net_SSH2() 不会连接到新设备,除非我首先手动连接并在它要求我验证有效性时说“是”新指纹。
    • @DustinSoodak - phpseclib 无法知道 OpenSSH 是否已通过 CLI 成功连接。就此而言,您甚至不需要在系统上安装 OpenSSH 即可让 phpseclib 工作......
    猜你喜欢
    • 2020-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-03
    • 2017-03-30
    • 2013-02-25
    • 1970-01-01
    • 2011-10-28
    相关资源
    最近更新 更多