如果您想使用证书,您可能最好使用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 -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();
SSH通常允许您执行命令,该命令可以针对您的节点应用程序。你为什么要在节点上做SSH部分? – sje397 2014-09-27 22:51:13
,因为我没有使用一些bsh脚本来运行SSH中的参数,而只是想执行一些执行多项任务的节点功能。而不是使用HTTP请求从服务器调用节点应用程序,我希望去SSH类型的连接,因为它更安全。因为我只想允许请求来自只有几个允许的客户端 – roshkattu 2014-09-27 22:53:14
HTTPS不够好?另一种选择是将您的节点应用设置为用户的登录shell :) – sje397 2014-09-27 22:54:54