- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我昨天的帖子:https://stackoverflow.com/questions/14296006/phpseclib-sftp-port-number
好的,所以昨天我开始使用 php 学习 SSH/SFTP。我搜索了一堆论坛帖子并推测我需要下载 phpseclib。
作为 php 的新手,因此从 php5 开始,我不知道以前的 php4 不使用 __constructor,因此出现了上述问题/帖子。
回答是相互矛盾的,并且与最初的问题有点偏离主题但是让我想到了一个我觉得在继续之前需要回答的问题:
哪个更好用,ssh2 pecl 扩展 还是 phpseclib?
本题:phpseclib vs libssh2是一样的,但我现在感觉有点过时了,如 2010 年 11 月 5 日 17:37 所问
最佳答案
我说的是 phpseclib。就我个人而言,我认为 phpseclib 会为您提供更好的支持,API 也更好,但主观原因也更少:
更便携。
我尝试在 Ubuntu 12.04 上安装 libssh2-php,但“sudo apt-get install libssh2-php”对我不起作用。即使它做到了,也可能不会获得最新版本。所以我不得不自己编译 libssh2 和 PECL 扩展,这总是很麻烦,而且很多管理员都不愿意这样做。
即使您愿意编译东西,假设您的硬盘驱动器出现故障并且您必须重建服务器。如果您愿意编译 libssh2,您可能也会编译其他东西。这意味着您不能只启动另一个盒子——您必须记住您在旧盒子上所做的所有更改并重新应用它们。如果您不记得它们怎么办?或者,如果其中一个尚未更新以与另一个的最新版本一起使用怎么办?
相比之下,phpseclib 不需要 PHP 以外的任何东西。如果它们可用,它将使用 mcrypt、gmp、bcmath 或 openssl,但如果它们不可用,那也没关系。它甚至不需要 PHP5,尽管它确实支持它。
更好的公钥支持。
如何使用 libssh2 实现:
<?php
$ssh = ssh2_connect('domain.tld');
ssh2_auth_pubkey_file($ssh, 'username', '/home/ubuntu/pubkey', '/home/ubuntu/privkey'/*, 'password'*/);
$stream = ssh2_exec($ssh, 'ls -la');
echo stream_get_contents($stream);
两者都必须是正确的格式。如果您没有使用 ssh-keygen 生成您的 key ,祝您在转换它们时好运。
使用 phpseclib:
<?php
include('Net/SSH2.php');
include('Crypt/RSA.php');
$rsa = new Crypt_RSA();
$rsa->loadKey('...');
$ssh = new Net_SSH2('domain.tld');
$ssh->login('username', $rsa);
//$ssh->setPassword('password');
echo $ssh->exec('ls -la');
暂时忽略 API,phpseclib 有几个明显的方法在这里脱颖而出:
交互式外壳。
让我们尝试在远程系统上执行 sudo。
使用 phpseclib: http://phpseclib.sourceforge.net/ssh/examples.html#password,sudo ,
使用 libssh2?我没有线索。我的最佳猜测(无效):
<?php
$ssh = ssh2_connect('domain.tld');
ssh2_auth_password($ssh, 'username', 'password');
$shell = ssh2_shell($ssh);
echo fread($shell, 1024*1024);
fwrite($shell, "sudo ls -la\n");
$output = fread($shell, 1024*1024);
echo $output;
if (preg_match('#[pP]assword[^:]*:#', $output)) {
fwrite($shell, "password\n");
}
echo fread($shell, 1024*1024);
我也无法使用 libssh2,但它可以与 phpseclib 一起工作:
http://phpseclib.sourceforge.net/ssh/examples.html#password,top ,
诊断问题
为什么 top 或 sudo 不起作用?在 phpseclib 上,您可以获得日志:
http://phpseclib.sourceforge.net/ssh/examples.html#password,oneoff,logging ,
它们看起来像这样:
http://phpseclib.sourceforge.net/ssh/log.txt
您还可以执行 print_r($ssh->getErrors())
或 echo $ssh->getLastError()
。
改变目录
我在 http://php.net/ssh2 上没有看到任何 cd 或 chdir 函数.然而,phpseclib 拥有它 - Net_SFTP::chdir(...)
速度
libssh2:
<?php
$ssh = ssh2_connect('domain.tld');
ssh2_auth_password($ssh, 'username', 'password');
$start = microtime(true);
$sftp = ssh2_sftp($ssh);
$fp = fopen('ssh2.sftp://'.$sftp.'/home/username/1mb', 'w');
fwrite($fp, str_repeat('a', 1024 * 1024));
$elapsed = microtime(true) - $start;
echo "took $elapsed seconds";
25.71 秒。
php安全库:
<?php
include('Net/SFTP.php');
$sftp = new Net_SFTP('domain.tld');
$sftp->login('username', 'password');
$start = microtime(true);
$sftp->put('1mb', str_repeat('a', 1024*1024));
$elapsed = microtime(true) - $start;
echo "took $elapsed seconds";
11.70 秒。
所以 phpseclib 的速度是原来的两倍多。
关于phpseclib 或 ssh2 pecl 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14304234/
我不确定这是我做错了什么,还是服务器不支持 phpseclib 或什么,但我正在尝试连接到只接受安全 FTP 连接的 FTP 服务器,并且只接受某些 IP 地址。现在我知道 FTP 服务器接受来自我的
我想通过 php 添加 ssh 用户。所以我试试 phpseclib。不幸的是,该脚本不会返回任何用户创建的结果。然后我尝试做一个简单的命令 ls -la。仍然没有结果,只是加载了几秒钟并返回一个空白
我正在使用 Phpseclib 1.0 在远程服务器上执行多个命令。我知道如何将它配置为在出错时退出,但是有什么方法可以设置它在出错时停止并执行不同的命令吗?例如,我有 8 个命令要执行,当它全部工作
下载部分文件的最佳方法是什么(使用 phpseclib)。我有一个日志文件,其中不断附加数据。我想定期连接到远程服务器并下载最新的 block ,而不是每次都下载整个文件。 Rsync 是完美的,但并
我正在尝试使用它,但它只是给我这个错误,我不知道如何解决这个问题.. Warning: include_once(Math/BigInteger.php): failed to open stream
在我的一个项目中,我将使用 PHP 通过 SSH 远程连接许多服务器。有两种解决方案,phpseclib和 ssh2基于 libssh2 库的 PHP PECL 扩展。 那么谁能比较一下两者并谈谈它们
我在/home/pi/mydir 中有我想执行的脚本,所以我需要做的第一件事是 $ssh->exec('cd mydir'); 然后 $ssh->exec('./script'); 但它不起作用,所以
我已经在我的机器上安装了 Apache,因此我可以使用 localhost 作为 PHP 服务器。这样可行。现在我正在尝试使用 PHP 通过 SFTP 将文件发送到另一台服务器。我环顾四周,看到推荐使
我一直在寻找如何使用 php 的解决方案建立与远程服务器的连接并执行命令。研究使我注意到了两种解决方案; phpseclib和 ssh2 .我会尽量不让我的问题变成比较帖子。据我所知,它们都是广泛使用
我使用phpseclib建立SSH连接并执行代码。但是它有一个问题。 13秒超时。无论如何,我可以禁用此超时或将其延长吗?我需要在服务器上下载文件,该文件可能很大,因此需要13秒钟以上 最佳答案 尝试
当前正在尝试创建一个PHP Web应用程序以运行各种Shell脚本来处理网站生成和删除操作。 这是我的 deletePropertyProcess.php 的摘录: $ssh = new Net_SS
我正在尝试针对 HP C7000 Onboard Administrator 执行以下代码 include('Net/SSH2.php'); $ssh = new Net_SSH2('OA'); if
PhpSecLib 创建的默认证书文件将 keyUsage 设置为:All rules of applications。我如何将 keyUsage 设置为 Windows Crypto Shell 将
我正在尝试从 SFTP 服务器下载文件。我已经设法连接到它并下载了文件。问题是服务器中的文件会每天更新,并且文件名的一部分是它生成的确切时间,这是不可预测的。 我如何实现我的 PHP 脚本,以便它下载
我已经从 github 安装了 phpseclib 库,我正在尝试使用 PHP 加密密码(用于 Steam 社区)。我可以通过使用 Steam 在他们网站上的 javascript 代码来使用 Jav
我正在尝试在 Vagrant VM 中运行一个 PHP 文件,该 VM 也使用 Composer 进行构建。 我收到以下错误: PHP Warning: require(/var/www/CLIEN
我刚刚自己发现了 phpseclib,并想将它用于我的代码中。不知何故,我不知道如何将文件从一个 sftp 目录复制到另一个 sftp 目录。如果您能帮我解决这个问题,那就太好了。 例如: 复制所有文
我不明白这个错误: Your requirements could not be resolved to an installable set of packages. Problem 1 - don
我正在使用 phpseclib 库中的以下代码登录远程服务器(远程服务器使用:SFTP - SSH 文件传输协议(protocol)): login('username', 'password'))
我正在尝试使用 PHPSecLib 通过 PHP 中的 SFTP 连接到 SSH2 服务器。但我的问题是,服务器需要一个受密码保护的 key 文件,还需要用户名和密码。似乎只能提供用户名+密码或用户名
我是一名优秀的程序员,十分优秀!