2013-08-25 40 views
0

在我的家庭网络上,我想从server1远程运行server2上的python脚本。这两台服务器都位于家庭网络中。我需要将文件上传到server2并运行python脚本。 python脚本需要几个小时才能完成,因此我想在server2的屏幕上运行它。我试图用php和一些bash脚本来实现这个。运行ssh -t生成远程屏幕

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

我的猜测:如果它本身是不是正在一个tty,这可能exec()是不是做运行ssh不做终端。

man ssh说:“多个-t选项强制tty分配,即使ssh没有本地tty”,但我不清楚“no local 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和&?也许你应该标记你的问题屏幕太idk。