从AWS Lambda(NodeJS)发送SSH命令

时间:2015-12-17 02:06:46

标签: node.js amazon-web-services aws-lambda

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

我知道有一些nodejs模块可以做到这一点,但AWS Lambda Nodejs没有它们,我也不想让任何EC2参与这个Lambda。

我只想知道如何通过AWS Lambda函数在Linux机器上执行某些命令,无论是通过SSH还是其他一些我无法想到的方法。

3 个答案:

答案 0 :(得分:1)

这篇文章现在已经相对陈旧了,但对于发现这一点的人来说,AWS发表了一篇博文,主要描述了你所寻找的内容:https://aws.amazon.com/fr/blogs/compute/scheduling-ssh-jobs-using-aws-lambda/

很明显,AWS博客文章描述了如何将其用于AWS服务,但该示例仍然使用python。

答案 1 :(得分:0)

选项数量:您可以从Python开始使用ssh,使用来自nodejs的https://www.npmjs.com/package/simple-ssh等软件包。

答案 2 :(得分:-1)

可以确认这是用于Alexa和simple-ssh的lambda。注意事项:ssh.on(“close”是必需的,因为否则lambda函数将在SSH命令完成工作之前关闭。(Lambda关闭alexa.execute调用。)

这是“ssh lambda aws”的谷歌搜索结果之一,所以我在这里发帖,希望能为其他需要这样做的人节省一些时间。

工作示例:https://github.com/PockyBum522/alexa_nodejs_send_ssh_commands_lambda

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.'); 
    }
};