2013-08-25 71 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。