运行ssh -t来生成远程屏幕

时间:2013-08-25 22:38:22

标签: php ssh

在我的家庭网络上,我想从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程序在其中运行。我以普通用户身份运行bash脚本,以root身份和www-data运行(php脚本通过apache运行,用户是www-data)。在任何用户下,从命令行运行时,bash脚本按预期工作。

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

任何想法我做错了什么?

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

谢谢, RB3

1 个答案:

答案 0 :(得分:1)

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

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和&amp;?也许你应该把你的问题屏幕标记得太懒了。