php sshpass 和 ssh2 的代码
php code for sshpass and ssh2
我是 PHP 编码新手
我正在编写新的简单脚本,但是当我输入这段代码时,我得到了空白页
谁能告诉我这段代码有什么问题吗?
<?php
if($_POST) {
$host = $_POST['host'];
if (!function_exists("ssh2_connect")) die("function ssh2_connect doesn't exist");
if(!($con = ssh2_connect("127.0.0.1", "22")))
{
echo "fail: unable to establish connection";
}
else
{
if(!ssh2_auth_password($con, "root", "password"))
{
echo "fail: unable to authenticate ";
}
else
{
$stream = ssh2_exec($con, "".$host."");
stream_set_blocking($stream, true);
$item = "";
while ($input = fread($stream,4096)) {
$item .= $input;
}
echo $item;
}
}
?>
对不起我的英语不好
我花了几天时间使 ssh2 在 PHP [www 上的专用服务器管理面板] 中工作,但我没有找到任何解决 输出 问题的方法。
唯一有效的方法(但这仅对某些脚本来说 足够 是好的)是 sleep 在 'exec' 和 [=20] 之间的某个时间=]:
$stream = ssh2_exec($connection->conn, 'pgrep screen');
stream_set_blocking($stream, true);
// sleep 0.5 sec, this trick won't work for commands that execution time is unpredictable
usleep(500000);
$line = '';
while($get = fgets($stream))
{
$line .= $get;
}
echo $line;
phpseclib, a pure PHP SSH2 implementation 你的运气可能会更好。例如
<?php
include('Net/SSH2.php');
$ssh = new Net_SSH2('www.domain.tld');
if (!$ssh->login('username', 'password')) {
exit('Login Failed');
}
echo $ssh->exec('pwd');
echo $ssh->exec('ls -la');
?>
如果你想让命令 运行 在得到输出之前运行一定的时间,你可以 $ssh->setTimeout(1)
。所以你可以在 Linux 上做 ping 127.0.0.1
,这不会停止,但 phpseclib 仍然会在一分钟后停止。
也许这不是 OP 的问题,但标题指出 php sshpass ssh,值得添加一个简单的 php 示例,使用 sshpass
和 ssh
以及 exec().
$ssh_host = "127.0.0.1";
$ssh_port = "22";
$ssh_user = "root";
$ssh_pass = "password";
$command = "uname -a";
$connection = "/usr/bin/sshpass -p $ssh_pass /usr/bin/ssh -p $ssh_port -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null $ssh_user@$ssh_host";
$output = exec($connection." ".$command." 2>&1");
echo "Output: $output";
我是 PHP 编码新手 我正在编写新的简单脚本,但是当我输入这段代码时,我得到了空白页 谁能告诉我这段代码有什么问题吗?
<?php
if($_POST) {
$host = $_POST['host'];
if (!function_exists("ssh2_connect")) die("function ssh2_connect doesn't exist");
if(!($con = ssh2_connect("127.0.0.1", "22")))
{
echo "fail: unable to establish connection";
}
else
{
if(!ssh2_auth_password($con, "root", "password"))
{
echo "fail: unable to authenticate ";
}
else
{
$stream = ssh2_exec($con, "".$host."");
stream_set_blocking($stream, true);
$item = "";
while ($input = fread($stream,4096)) {
$item .= $input;
}
echo $item;
}
}
?>
对不起我的英语不好
我花了几天时间使 ssh2 在 PHP [www 上的专用服务器管理面板] 中工作,但我没有找到任何解决 输出 问题的方法。 唯一有效的方法(但这仅对某些脚本来说 足够 是好的)是 sleep 在 'exec' 和 [=20] 之间的某个时间=]:
$stream = ssh2_exec($connection->conn, 'pgrep screen');
stream_set_blocking($stream, true);
// sleep 0.5 sec, this trick won't work for commands that execution time is unpredictable
usleep(500000);
$line = '';
while($get = fgets($stream))
{
$line .= $get;
}
echo $line;
phpseclib, a pure PHP SSH2 implementation 你的运气可能会更好。例如
<?php
include('Net/SSH2.php');
$ssh = new Net_SSH2('www.domain.tld');
if (!$ssh->login('username', 'password')) {
exit('Login Failed');
}
echo $ssh->exec('pwd');
echo $ssh->exec('ls -la');
?>
如果你想让命令 运行 在得到输出之前运行一定的时间,你可以 $ssh->setTimeout(1)
。所以你可以在 Linux 上做 ping 127.0.0.1
,这不会停止,但 phpseclib 仍然会在一分钟后停止。
也许这不是 OP 的问题,但标题指出 php sshpass ssh,值得添加一个简单的 php 示例,使用 sshpass
和 ssh
以及 exec().
$ssh_host = "127.0.0.1";
$ssh_port = "22";
$ssh_user = "root";
$ssh_pass = "password";
$command = "uname -a";
$connection = "/usr/bin/sshpass -p $ssh_pass /usr/bin/ssh -p $ssh_port -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null $ssh_user@$ssh_host";
$output = exec($connection." ".$command." 2>&1");
echo "Output: $output";