PHPSECLIB 和 SSH2

PHPSECLIB and SSH2

我一直在寻找关于如何使用 php 建立与远程服务器的连接并执行命令的解决方案。研究使我注意到了两个解决方案; phpseclibssh2。我会尽量避免将我的问题变成比较 post。据我所知,它们都是广泛使用的解决方案。 ssh2 是一个 php 扩展,而 phpseclib 是一个纯 php 库。看来 phpseclib 也可以和 ssh2 结合使用。我更愿意避免安装扩展,所以我更倾向于使用 phpseclib。但是我确实有一些顾虑。

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

我看到的关于 phpseclib 的大多数 post 都已经有好几年了,这仍然是“现代”解决方案吗?

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

这是一个使用 RSA keyphpseclib 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 密钥,我就可以简单地提供我的连接与我的本地私钥 (和用户),我应该能够连接? public 键是否需要在特定的地方?

phpseclib 1.0 理论上适用于 PHP 4.4,但 phpseclib 2.0 需要 PHP 5.3+。 3.0 需要 5.6+。所有版本的 phpseclib 一直工作到 PHP 7.4,正如在 Travis CI 测试结果中可以看到的那样:

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

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

I am still fairly new to ssh but if I understand the above correctly, so long as the remote server has a .pub key I can simply supply my connection with my local private key (and user) and I should be able to connect? Does the public key need to be somewhere specific?

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