【问题标题】:running ssh -t to spawn a remote screen运行 ssh -t 以生成远程屏幕
【发布时间】:2013-08-25 22:38:22
【问题描述】:

在我的家庭网络上,我想从 server1 远程在 server2 上运行 python 脚本。两台服务器都在家庭网络上。我需要将文件上传到 server2 并运行 python 脚本。 python 脚本需要几个小时才能完成,所以我想在 server2 的屏幕内运行它。我正在尝试使用 php 和一些 bash 脚本来实现这一点。

我在服务器 1 上的 php 脚本在同一台服务器上运行 bash 脚本。 bash 脚本使用: [ssh -t user@server screen 'sudo python pyth_script.py'] 尝试在 server2 上运行 python 脚本。请注意,我使用的是 -t 选项。 bash 脚本还有一个 scp 命令,用于将文件从 server1 复制到 server2。我已经使用密钥来启用从 server1 到 server2 的 ssh 命令,而无需密码。

当我从命令行运行 bash 脚本时,它运行良好。 server2 上的屏幕被激活,python 程序在其中运行。我以普通用户、root 和 www-data 身份运行 bash 脚本(php 脚本通过 apache 运行,并且是用户 www-data)。在任何用户下,从命令行运行 bash 脚本都会按预期工作。

当我通过 php 脚本运行 bash 脚本(单击触发 php 脚本的 html 表单)时,scp 命令正常工作并且文件被传输,但是 python 脚本没有运行。包含“ssh ... screen ...”的 php 行的输出返回“必须连接到终端。”,但我使用的是 -t 选项,正如我所提到的,bash 脚本在运行时按预期运行从命令行。

任何想法我做错了什么?

使用 Web 界面远程运行 python 脚本的最佳方法是什么?

谢谢, rb3

【问题讨论】:

    标签: php ssh


    【解决方案1】:

    我的猜测:如果 ssh 本身没有在 tty 中运行,那么 ssh 就不会执行 tty,exec() 可能没有这样做。

    man ssh 说“多个 -t 选项强制 tty 分配,即使 ssh 没有本地 tty”但我不清楚“没有本地 tty”是什么意思。

    idk...我有点想也许你应该使用phpseclib, a pure PHP SSH2 implementation。例如。

    <?php
    include('Net/SSH2.php');
    
    $ssh = new Net_SSH2('www.domain.tld');
    if (!$ssh->login('username', 'password')) {
        exit('Login Failed');
    }
    
    echo $ssh->exec('screen 'sudo python pyth_script.py'');
    ?>
    

    如果您需要 PTY / TTY,请查看:

    http://phpseclib.sourceforge.net/ssh/pty.html

    也就是说,请记住,我不是屏幕专家。也许您想使用 nohup 和 &?也许你也应该标记你的问题屏幕。

    【讨论】:

      猜你喜欢
      • 2018-03-03
      • 2014-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-02
      相关资源
      最近更新 更多