我有一个难以理解的问题.
我正在尝试自动登录到路由器的CLI并运行通过网页获得的一些命令.但是我不知道路由器是否启用了telnet或SSH(可能是一个,另一个或两者),我有一个可能的用户名/密码组合列表,我需要尝试获取访问权限.
哦,我无法更改协议类型或设备上的凭据,因此这不是一个真正的选择.
我能够弄清楚如何使用已知的协议和登录凭据登录到路由器并运行必要的命令(包含在下面),但我不知道是否应该使用if/else块来处理telnet/ssh决定,或者如果switch语句可能更好?在PHP中使用Expect是一种更简单的方法吗?
function tunnelRun($commands,$user,$pass, $yubi){
$cpeIP = "1.2.3.4";
$commands_explode = explode("\n", $commands);
$screenOut = "";
$ssh = new Net_SSH2('router_jumphost');
if (!$ssh->login($user, $pass . $yubi)) {
exit('Login Failed');
}
$ssh->setTimeout(2);
$ssh->write("ssh -l username $cpeIP\n");
$ssh->read("assword:");
$ssh->write("password\n");
$ssh->read("#");
$ssh->write("\n");
$cpePrompt = $ssh->read('/.*[#|>]/', NET_SSH2_READ_REGEX);
$cpePrompt = str_replace("\n", '', trim($cpePrompt));
$ssh->write("config t\n");
foreach ($commands_explode as $i) {
$ssh->write("$i\n"); // note the "\n"
$ssh->setTimeout(2);
$screenOut .= $ssh->read();
}
$ssh->write("end\n");
$ssh->read($cpePrompt);
$ssh->write("exit\n");
echo "Router Update completed! Results below:<br><br>";
echo "<div id=\"text_out\"><textarea style=\" border:none; width: …Run Code Online (Sandbox Code Playgroud)