好的,这可能需要一点前置解释。
我目前正在使用node-red进行自动化项目开发。
我想通过ssh从远程服务器上传和下载文件。为此我使用了这个叫做node-red-contrib-sftpc
的node-red软件包。我稍微改写了这个库,以便可以通过传递给节点的有效负载来提供SFTP连接的某些凭据。
要建立连接,使用ssh2-sftp-client 的sftp.connect
方法:
await sftp.connect({
host: node.server.host,
port: node.server.port,
username: node.server.username,
password: node.server.password});
在文档中可以找到,您可以使用参数
hostHash
和hostVerifier
来提供连接。基于ssh2的ssh2-sftp-client模型的文档指出:
因此,我的问题在于:如何编写hostHash - 字符串 - 任何由节点支持的有效哈希算法。使用此算法对主机的密钥进行哈希处理,并将其作为十六进制字符串传递给hostVerifier函数进行验证。默认值:(无)
hostVerifier - 函数 - 具有参数(hashedKey [,callback])的函数,其中hashedKey是主机密钥的字符串十六进制哈希,用于验证目的。返回true以继续握手或false以拒绝并断开连接,或者在需要执行异步验证时调用callback()以返回true或false。默认值:(如果未设置hostVerifier,则自动接受)
hostVerifier
函数?我想传递hashedKey
和fingerprint
,以便在握手成功或失败时返回true
或false
。
我想检查给定的服务器密钥指纹是否正确,并且我连接到了正确的服务器。据我所理解,第二个参数将是一个回调函数,但我不知道如何使用它来验证握手。 这是我的尝试,或者至少是我尝试做到这一点的方式。
node.server.hostVerifier = function (hashedKey, (hashedKey, msg.fingerprint)=> {
if (hashedKey = msg.fingerprint) return true;
else return false
}){};
await sftp.connect({
host: node.server.host,
port: node.server.port,
username: node.server.username,
password: node.server.password,
hostHash: 'someHashAlgo',
hostVerifier: node.server.hostVerifier,});
我知道这样做是完全错误的,但我快要疯了,因为我不知道如何正确地检查ssh主机密钥指纹。