2016-06-29 73 views
0

我一直在使用SSH2,連接已經連接到遠程服務器,我使用SSH2 _exec運行此命令"sshpass -p 'xxxx1248' ssh [email protected] ",現在如果我連接到新的遠程服務器,我想訪問他們的外殼。 我有一個任務在第二臺遠程服務器上運行命令。 我會怎麼做?遠程連接到另一個遠程和獲得新的連接的外殼

$connection = ssh2_connect($sIP, $iPort); 

$autherised = ssh2_auth_password($connection, $sUserName, $sPassword); 
$oResult = ssh2_exec($connection, "sshpass -p 'xxxx1248' ssh [email protected]"); 

如何訪問IP的外殼1x2.1xx.3x.xx

請解決這個問題,如果任何一個已經在這之前做了....

+0

是否要在目標機器上運行命令(1x2.1xx.3x.xx)? – ymas

+0

是的,我想在目標機器上運行幾個命令。和第一個命令會給我一個ENV變量,並使用該變量我需要運行另一個需要2-5分鐘完成的程序,它會像我在做什麼? –

回答

0

我會提供一段代碼,將在目標機器上運行的「ls」命令。讓我知道如果這是你想要的。

$conn = ssh2_connect($host, $port); 
ssh2_auth_password($conn, $user, $pass); 
// runs the ls -al command on $targetHost 
$stream = ssh2_exec($conn, 
    "sshpass -p '{$passTarget}' ssh [email protected]$targetHost ls -al" 
); 

// retrieving the data 
stream_set_blocking($stream, true); 
$output = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO); 

echo stream_get_contents($output); 

該代碼輸出$targetHost機器上的目錄列表。

我希望這會有所幫助。

編輯:

我將在這裏補充一個例子:

在我的目標機器,我創建了一個小bash腳本,test.sh

export TEST_VAR=1 

然後,我改變了ssh2_exec行:

$stream = ssh2_exec($conn, 
    "sshpass -p '{$passTarget}' ssh [email protected]$targetHost 'source test.sh; echo \$TEST_VAR'" 
); 

我得到預期的資源ult:1

+0

謝謝,我想要的是同樣的東西,但是這個ls,pwd這些命令正在工作。但是當我運行任何兩個命令是行不通的。 像我運行這樣的, '$流= ssh2_exec($康恩, 一個SH程序 「sshpass -p '{$ passTarget}' SSH $ targetUser @ $ targetHost '源sequencerConfig.sh;回聲$ SEQUENCER_RUNS'」 );' 請參閱sh程序源以獲取env變量$ SEQUENCER_RUNS,我將其作爲第二個命令進行回顯。該輸出是一個空字符串。 –

+0

你好阿美,爲了安全起見,我設立了類似的情況,一切工作正常。我相信你沒有逃避'$'的標誌。試試:'echo \ $ SEQUENCE_RUNS'。我將用一個小例子編輯我的答案。 – ymas