Node.js NodeJS SSH身份验证主机和命令执行
我希望有一个NodeJS应用程序,我可以使用公钥通过SSH连接到该应用程序,并向其发送一些数据。更明确地说,应该如下所示:Node.js NodeJS SSH身份验证主机和命令执行,node.js,ssh,Node.js,Ssh,我希望有一个NodeJS应用程序,我可以使用公钥通过SSH连接到该应用程序,并向其发送一些数据。更明确地说,应该如下所示: NodeJS应用程序编写了一些函数 我从服务器ssh nodejs应用程序,并试图通过公钥识别我 经过身份验证后,我可以向它发送一些字符串,应用程序将解析字符串并执行不同的函数 唯一的问题是,我无法在任何SSH-npm包存在的情况下做到这一点。我希望nodejs应用程序只接受SSH连接并进行身份验证,然后等待一些字符串。这可能吗 编辑:我想使用这种方法,因为我只想调用节
- NodeJS应用程序编写了一些函数
- 我从服务器ssh nodejs应用程序,并试图通过公钥识别我
- 经过身份验证后,我可以向它发送一些字符串,应用程序将解析字符串并执行不同的函数
编辑:我想使用这种方法,因为我只想调用节点函数,仅从一些允许的客户端(服务器)执行某些操作,我不想通过HTTP发送这些请求,以便任何人都可以访问它您最好使用带有客户端证书的HTTPS,而不是在节点内使用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服务器,请执行以下操作:
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);
对于cURL,命令行类似于:cURL-v-s--cacert server\u ca.crt--key client.key--cert client.crthttps://localhost
或跳过服务器验证:curl-v-s-k--key client.key--cert client.crthttps://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通常允许您执行命令,这些命令可以指向您的节点应用程序。为什么要在node中执行SSH部分?因为,我不想使用SSH中的params运行一些bash脚本,我只想执行一些执行多个任务的节点函数。我不想通过HTTP请求从服务器调用节点应用程序,而是希望因为SSH类型的连接更安全,所以我选择SSH类型的连接。因为我只想允许请求来自几个允许的客户端。HTTPS不够好?另一个选项是将节点应用程序设置为用户的登录shell:)HTTPS足够好。但我的主要问题是,我不希望请求来自给定服务器之外的任何其他IP。因此,其他任何人都无法触发来自任何其他IP的请求。到目前为止,我使用express只允许来自1个IP的请求。但是在该特性中,我必须允许来自我拥有的其他多个服务器的请求,并且该脚本将在许多其他服务器上运行。这将导致管理混乱。此应用程序将部署在多个服务器/VP上。因此,如果我要更新允许的IP地址,那么在每个服务器/vps上更新允许的IP请求将是一个混乱。这就是为什么我要研究类似的东西,这样我就可以通过公钥进行身份验证。