簡體   English   中英

ssh2_exec環境試圖ssh到vyos路由器並獲取配置

[英]ssh2_exec environment trying to ssh to vyos router and get configuration

我正在編寫一個PHP腳本以通過ssh連接到vyos路由器並使用以下命令備份配置

show configuration commands

當我從命令提示符下連接時,這按預期工作

ssh vyos@1.1.1.99
Password: ****
$ show configuration

interfaces {
...

但是,這是我的腳本,我正在嘗試使用php做同樣的事情。

<?php
//Connect to VyOS virtual router and backup config

$host = '192.168.171.50';
$user = 'vyos';
$pass = 'vyos';

$connection = ssh2_connect($host, 22 );
if (!$connection) die('Connection failed');

if (ssh2_auth_password($connection, $user, $pass)) {
  echo "Authentication Successful!\n";
} else {
  die('Authentication Failed...');
}

$stream = ssh2_exec($connection, 'show configuration' );
$errorStream = ssh2_fetch_stream($stream, SSH2_STREAM_STDERR);

// Enable blocking for both streams
stream_set_blocking($errorStream, true);
stream_set_blocking($stream, true);

echo "Output: " . stream_get_contents($stream);
echo "Error: " . stream_get_contents($errorStream);

// Close the streams        
fclose($errorStream);
fclose($stream);

exit;

代碼返回錯誤

Invalid command: [show]

我最好的猜測是,這與PATH或其他環境變量有關。 有任何想法嗎? 我正在使用vyatta / vyos vm映像進行測試。

我認為phpseclib可能會更好。 例如:

$ssh = new Net_SSH2('192.168.171.50');
$ssh->login('vyos', 'vyos');

$ssh->read('$');
$ssh->write("show configuration running\n");
echo $ssh->read('$');

這也可能起作用:

$ssh = new Net_SSH2('192.168.171.50');
$ssh->login('vyos', 'vyos');

echo $ssh->exec('show configuration running');

如果這不起作用,則可能:

$ssh = new Net_SSH2('192.168.171.50');
$ssh->login('vyos', 'vyos');

$ssh->enablePTY();
echo $ssh->exec('show configuration running');

JC的“編輯如下:最終工作代碼”-必須將終端長度設置為0或代碼在尋呼機上掛起。

  include('Net/SSH2.php');
  $ssh = new \Net_SSH2('192.168.171.50');
  $ssh->login('vyos', 'vyos');

  $ssh->read('$');
  $ssh->write("set terminal length 0\n");
  $ssh->read('$');
  $ssh->write("show configuration\n");
  echo $ssh->read('$');

暫無
暫無

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

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