簡體   English   中英

在同一個 shell 中通過 ssh2_exec 執行多個 CLI 命令

[英]Execute multiple CLI commands via ssh2_exec in the same shell

我一直在嘗試使用 PHP 的 ssh2_exec 命令在遠程設備上執行兩個或多個命令,但它似乎無法執行命令,等待響應並執行另一個命令。

我需要運行的第二個命令必須在第一個命令的上下文中,因此它必須在同一個 shell 中執行。 我的意思是這樣的

FWEFW # config system admin

該命令將帶我進入“上下文”。 結果將類似於:

FWEFW (admin) # 

從這里,我想運行第二個命令,可以設置密碼或(管理員)的另一個字段

FWEFW (admin) # set password 'abcde'

這是我到目前為止所嘗試的:

$stream = ssh2_exec($con, 'config system admin');
stream_set_blocking($stream, TRUE);
$output = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO);

// After this, what can I do to stay in the same shell and execute the second command after "config system admin"?

經過很多挫折之后,我得出以下結論:

當您需要運行單個命令時,ssh2_exec命令很有用。 就我而言,在獲得所需結果之前,我需要在同一會話中運行多個命令。 為此,請按照以下步驟操作:

創建一個交互式外殼

$shell = ssh2_shell($connection, 'xterm', NULL, 400, 400, SSH2_TERM_UNIT_CHARS)

執行第一個命令

fwrite($shell, 'command 1' . PHP_EOL); // Don't forget PHP_EOL => /n

等待整個流

stream_set_blocking($shell, TRUE);

運行第二個命令

fwrite($shell, 'command 2' . PHP_EOL);

依此類推。 我已經用四個命令對其進行了測試,並且效果很好。

執行完所有命令后,您可以通過“訪問外殼程序”來檢索結果

$data = "";
$buf  = NULL;

while (! feof($shell))
{
    $buf = fread($shell, 4096);
    $data .= $buf;
}

fclose($shell);

您所需的數據現在存儲在$ data變量中。 請注意,如果您的shell被卡在提示處(大多數情況下是這樣),則循環將永遠運行直到引發超時錯誤。

為了解決這個問題,我必須運行“ exit”命令以退出外殼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM