Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 从AWS Lambda(NodeJS)发送SSH命令_Node.js_Amazon Web Services_Aws Lambda - Fatal编程技术网

Node.js 从AWS Lambda(NodeJS)发送SSH命令

Node.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

我想在AWS Lambda Nodejs中创建一个函数,可以向linux机器发送一些SSH命令。可能吗

我知道有一些nodejs模块可以做到这一点,但是AWS Lambda nodejs没有,我不想在这个Lambda中包含任何EC2


我只是想知道如何在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.'); 
    }
};