NodeJS SSH身份validation主机和命令执行

我想有一个NodeJS应用程序,我可以通过SSH连接公钥并发送一些数据。 更加明确的说法应该如下:

  • NodeJS应用程序已经编写了一些函数
  • 从一个服务器我ssh的nodejs应用程序,并试图通过我的公钥识别我
  • 通过身份validation后,我可以发送一些string,应用程序将parsingstring并执行不同的function

唯一的问题是,我不能设法做任何SSH npm包现有。 我想要nodejs应用程序只接受SSH连接,并进行身份validation,并等待一些string。 这可能吗?

编辑:我想用这种方法,因为我只想调用节点函数来执行一些只允许一些客户端(服务器),我不想通过HTTP发送这些请求,所以任何人都可以访问它

如果你想使用证书,你最好使用带有客户端证书的HTTPS,而不是在节点内使用SSH服务器(虽然你可以使用ssh模块,绑定到libssh2)。

以下是您如何设置HTTPS服务器:

var https = require('https'), fs = require('fs'); var options = { key: fs.readFileSync('server.key'), // server private key cert: fs.readFileSync('server.crt'), // server certificate ca: fs.readFileSync('server_ca.crt'), // server CA, this can be an array of CAs too requestCert: true }; https.createServer(options, function(req, res) { if (req.client.authorized) { res.writeHead(200); res.end('Hello world!'); } else { res.writeHead(401); res.end(); } }).listen(443); 

然后,只需要使用您的HTTPS客户端使用的服务器的CA生成客户端证书即可。

为了连接到HTTPS服务器:

对于cURL ,命令行如下所示: curl -v -s --cacert server_ca.crt --key client.key --cert client.crt https://localhost或跳过服务器validation: curl -v -s -k --key client.key --cert client.crt https://localhost

对于node.js ,你可以使用如下的客户端代码:

 var https = require('https'), fs = require('fs'); var options = { // normal http.request()-specific options method: 'GET', path: '/', // tls.connect()-specific options key: fs.readFileSync('client.key'), // client private key cert: fs.readFileSync('client.crt'), // client certificate ca: fs.readFileSync('server_ca.crt'), // server CA, this can be an array of CAs too // or comment out the `ca` setting and use the following to skip server verification, // similar to cURL's `-k` option: //rejectUnauthorized: false }; https.request(options, function(res) { if (res.statusCode === 200) console.log('Accepted!'); else console.log('Rejected!'); // drain and discard any response data res.resume(); }).end();