[英]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.