【问题标题】:Execute Multiple commands using same shell with simple ssh使用带有简单 ssh 的相同 shell 执行多个命令
【发布时间】:2018-12-28 09:10:11
【问题描述】:

我必须在节点 js 的同一个 ssh shell 中执行多个命令。我为此使用 simple-ssh。但是由于 sudo 的情况,执行停止了。

下面的代码有四个我需要在同一个 ssh 中执行的命令。执行命令将用户切换到 root 后停止。我无法在单独的 ssh 中执行第三个命令,因为命令 cd 和 switch user 不会在新的 ssh 中执行。

   var cmd = 'cd /home/sample/test/core/build/bin/' + "\n" + 'sudo su root' 
   + "\n" + 'su test' + "\n" + './app'
   ssh.exec(cmd, {
        pty: true,
        out: function (stdout) {
            console.log(stdout);
        },
        err: function (stdout) {
            console.log(stdout);
        }
    }).start();

我想用同一个 ssh 执行四个命令。有没有办法可以实现?我也很乐意从 simple-ssh 迁移到任何其他可以做到这一点的 npm。

【问题讨论】:

    标签: javascript node.js ssh


    【解决方案1】:

    不确定您使用的是哪个 npm 模块。但是你可以通过使用ssh2shell来实现这一点

    这将命令数组作为参数

    commands:["cd /home/sample/test/core/build/bin/", "sudo su root", "su test", "./app"]

    脚本编写愉快!

    【讨论】:

    • 嗨 Vimal,当所有命令执行完毕后,shell 将关闭,这对我来说是个问题,因为我正在运行一个也关闭的应用程序。如何让它等待或保持特定的会话时间? - @Vimal Mahi
    • @VenkatMano - npmjs.com/package/ssh2-promise 似乎适用于自动连接,但不确定我们是否可以在 exec() 中传递多个命令。请看一看。
    • 我找到了在后台启动应用程序的解决方案。而且ssh2shell中还有一个空闲超时,可以等待指定的时间再关闭终端。
    • @VenkatMano - 很高兴为您提供帮助。 :-)
    【解决方案2】:

    sudo su root 将创建一个新的 shell(和 su 测试),因此它不会接收语句序列。 尝试使用双引号和 -c 进行封装

    maarten@Mint19:~$ cat su_test.sh 
    sudo sh -c "cd /home ; du -s * | sort -rn > USAGE"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-24
      • 1970-01-01
      • 2013-01-08
      • 2018-12-04
      • 2011-03-28
      相关资源
      最近更新 更多