Node.js 从AWS Lambda(NodeJS)发送SSH命令
我想在AWS Lambda Nodejs中创建一个函数,可以向linux机器发送一些SSH命令。可能吗 我知道有一些nodejs模块可以做到这一点,但是AWS Lambda nodejs没有,我不想在这个Lambda中包含任何EC2Node.js 从AWS Lambda(NodeJS)发送SSH命令,node.js,amazon-web-services,aws-lambda,Node.js,Amazon Web Services,Aws Lambda,我想在AWS Lambda Nodejs中创建一个函数,可以向linux机器发送一些SSH命令。可能吗 我知道有一些nodejs模块可以做到这一点,但是AWS Lambda nodejs没有,我不想在这个Lambda中包含任何EC2 我只是想知道如何在linux机器上通过AWS Lambda函数执行一些命令,或者通过SSH或者其他一些我想不到的方法。选项数量:可以从Python中打开SSH,使用类似于从nodejs的包,等等。可以确认这在使用Alexa和简单SSH的Lambda上起作用。注意:s
我只是想知道如何在linux机器上通过AWS Lambda函数执行一些命令,或者通过SSH或者其他一些我想不到的方法。选项数量:可以从Python中打开SSH,使用类似于从nodejs的包,等等。可以确认这在使用Alexa和简单SSH的Lambda上起作用。注意:ssh.on(“close”是必需的,因为否则lambda函数将在ssh命令完成工作之前关闭。(lambda在alexa.execute调用时关闭。) 这是谷歌搜索“ssh lambda aws”的最佳结果之一,所以我在这里发布这篇文章,希望为其他需要这样做的人节省一些时间 工作示例:
这篇文章现在已经比较老了,但无论是谁找到了它,AWS都会在博客上写一篇文章,主要描述你在寻找什么:
显然,AWS博客文章描述了如何将其用于AWS服务,但示例仍然使用python。您可以对其他服务器执行REST调用以完成您想要的任务吗?或者,您可以使用类似的方式调用shell?但是Lambda是否允许您使用ssh将是一个有趣的问题,我没有答案回答你的问题,不过我只想提一下,Lambda目前没有能力与VPC背后的任何资源进行交互。看看这个项目,它可能会很有用?谢谢你,但是我想我现在只使用我的家庭服务器API。这个问题的标题是“从AWS Lambda(NodeJS)发送SSH命令”。而
simple ssh
包允许通过nodejs与系统上的ssh
可执行文件进行交互。在lambda上运行ssh是不够的。(因为AWS lambda计算机没有安装ssh
可执行文件)因此,这个被接受的答案有点误导,因为它不能解决核心运营问题。不知道为什么会被否决。这是正确的答案!它在2019年仍然有效
var SSH = require('simple-ssh');
var Alexa = require("alexa-sdk");
var ssh = new SSH({
host: 'yourserver.com',
user: 'username',
key: `-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEApQtRxugrDMU8YNBy2j2Lyk6yAxMSKaiusrNUamXKLxFvdlZ1
6HCN+jjaE7q8OYFEmq9l2B5U8GCYMFldXWBxIv7fvRWyi1ZTw3olaZ8DmGYwPKLM
TOQ3MOm/zcJZbiTY1/cx2CW6NupPX78O42hLKM2iJwp6epgxC5t2Vw==
-----END RSA PRIVATE KEY-----`
});
exports.handler = function(event, context, callback) {
var alexa = Alexa.handler(event, context);
alexa.registerHandlers(handlers);
ssh.on("close", function () {alexa.execute()});
ssh
.exec('nohup /home/username/script.sh > /dev/null 2>&1 &', { // Nohup runs script in BG, > /dev/null redirects output. & also runs in BG. Trying to keep things fast to make alexa response time good.
out: console.log.bind(console)
})
.exec('exit', { // Also for trying to keep things fast.
out: console.log.bind(console)
}).start();
};
var handlers = {
'LaunchRequest': function(){
this.emit(':tell', 'Now opening the garage door.');
}
};