我希望有一个NodeJS应用程序,我可以通过SSH使用公钥连接到该应用程序并发送一些数据。为了更明确,它应该如下:
唯一的问题是我无法使用现有的任何SSH npm软件包进行此操作。我希望nodejs应用程序只接受SSH连接并进行身份验证并等待一些字符串。这可能吗?
编辑:我想采用这种方法,因为我只想调用节点函数来执行某些允许的客户端(服务器),我不想通过HTTP发送这些请求,所以任何人都可以访问它/ p>答案 0 :(得分:3)
如果您想使用证书,最好不要在客户端证书中使用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
或跳过服务器验证: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();