PHPSECLIB 和 SSH2

问题描述 投票:0回答:2

我一直在寻找如何使用

php
建立与远程服务器的连接并执行命令的解决方案。通过研究,我注意到了两种解决方案;
phpseclib
ssh2
。我会尽力避免我的问题将其变成比较帖子。据我所知,它们都是广泛使用的解决方案。
ssh2
是一个php扩展,而
phpseclib
是一个纯php库。看来你也可以将
phpseclib
ssh2
结合使用。我更愿意避免安装扩展,所以我更倾向于使用
phpseclib
。不过我确实有一些担忧。

ssh2
php
的直接文档,这是否意味着它是更好的解决方案?

我看到的大多数关于

phpseclib
的帖子都有好几年了,这仍然是一个“现代”的解决方案吗?

phpseclib
在此处找到)表示它是为了与
php 4
兼容而构建的,而
2.0
则面向
php 5
。对于那些使用
php 7
的人来说,这是一个可以接受的解决方案吗?

这里是一个使用

RSA key
ssh
 建立 
phpseclib 2.0

连接的示例
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
密钥,我就可以简单地提供与我的本地私钥(和用户)的连接,我应该能够连接?公钥需要放在特定的地方吗?

php ssh phpseclib ssh2
2个回答
1
投票
理论上,phpseclib 1.0 适用于 PHP 4.4,但 phpseclib 2.0 需要 PHP 5.3+。 3.0 需要 5.6+。从 Travis CI 测试结果可以看出,所有版本的 phpseclib 都可以一直工作到 PHP 7.4:

https://travis-ci.org/github/phpseclib/phpseclib

(旧版本的 PHP 未经过单元测试,因为 Travis CI 不支持它们;可以使用 Docker 容器,但是是的)

我对

ssh

仍然相当陌生,但如果我正确理解上述内容,只要远程服务器有一个
.pub
密钥,我就可以简单地提供与我的本地私钥(和用户)的连接,我应该能够连接?公钥需要放在特定的地方吗?

对于 OpenSSH 服务器,公钥需要位于 ~/.ssh/authorized_keys 中。在客户端,您真正需要的只是私钥。可以从私钥中提取公钥。


0
投票
对于那些只想连接的人,现在代码如下所示:

use phpseclib3\Crypt\PublicKeyLoader; use phpseclib3\Net\SSH2; $pemp = '/path/to/privatekey.pem'; $keyp = $_ENV['PEM_PASS']; #pass for key $addr = '127.0.1.1'; $username = 'username'; $ssh = new SSH2($addr); $rsa = PublicKeyLoader::load(file_get_contents($pemp), $keyp); if(!$ssh->login($username, $rsa)){ die('Login Failed'); } echo $ssh->exec('pwd');
    
© www.soinside.com 2019 - 2024. All rights reserved.