我一直在寻找关于如何使用php建立到远程服务器的连接和执行命令的解决方案。研究给我带来了两种解决方案:phpseclib和ssh2。我会尽量避免把我的问题变成一个比较的帖子。据我所知,它们都是广泛使用的解决方案。ssh2是一个php扩展,而phpseclib是一个纯php库。您似乎也可以将phpseclib与ssh2结合使用。我更倾向于避免安装扩展,所以我更倾向于使用phpseclib。不过,我确实有些担心。
ssh2有直接的php文档,这是否意味着它是一个更好的解决方案?
我看到的大多数关于phpseclib的帖子都有几年的历史了,这是否仍然是一种“现代的”解决方案?
phpseclib (在这里发现的)表示,它的创建是为了便于与php 4合作,2.0是面向php 5的。对于那些使用php 7的人来说,这是一个可接受的解决方案吗?
下面是一个使用RSA key与phpseclib 2.0建立ssh连接的示例
require __DIR__ . '/vendor/autoload.php';
use phpseclib\Net\SSH2;
use phpseclib\Crypt\RSA;
$ssh = new SSH2('www.domain.tld');
$key = new RSA();
$key->loadKey(file_get_contents('privatekey'));
if (!$ssh->login('username', $key)) {
exit('Login Failed');
}
echo $ssh->exec('pwd');我对ssh还是相当陌生的,但是如果我正确地理解了上面的内容,只要远程服务器有一个.pub密钥,我就可以简单地用本地私钥(和用户)提供我的连接,并且我应该能够连接?公钥需要在某个特定的地方吗?
发布于 2020-07-01 16:33:43
理论上讲,phpseclib 1.0适用于PHP4.4,但是phpseclib 2.0需要PHP 5.3+。3.0需要5.6+。所有版本的phpseclib都通过PHP7.4工作,从Travis CI测试结果中可以看到:
https://travis-ci.org/github/phpseclib/phpseclib
( PHP的旧版本没有进行单元测试,因为Travis CI不支持它们;Docker容器可以使用,但是是的)
我对
ssh还是相当陌生的,但是如果我正确地理解了上面的内容,只要远程服务器有一个.pub密钥,我就可以简单地用本地私钥(和用户)提供我的连接,并且我应该能够连接?公钥需要在某个特定的地方吗?
对于OpenSSH服务器,公钥需要驻留在~/..ssh/authorized_ key中。在客户端,你真正需要的就是私钥。可以从私钥中提取公钥。
https://stackoverflow.com/questions/62680582
复制相似问题