PHPSECLIB 和 SSH2
PHPSECLIB and SSH2
我一直在寻找关于如何使用 php
建立与远程服务器的连接并执行命令的解决方案。研究使我注意到了两个解决方案; phpseclib
和 ssh2
。我会尽量避免将我的问题变成比较 post。据我所知,它们都是广泛使用的解决方案。 ssh2
是一个 php 扩展,而 phpseclib
是一个纯 php 库。看来 phpseclib
也可以和 ssh2
结合使用。我更愿意避免安装扩展,所以我更倾向于使用 phpseclib
。但是我确实有一些顾虑。
ssh2
有 php
的直接文档,这是否意味着它是更好的解决方案?
我看到的关于 phpseclib
的大多数 post 都已经有好几年了,这仍然是“现代”解决方案吗?
phpseclib
(found here) 表示它是为了与 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
密钥,我就可以简单地提供我的连接与我的本地私钥 (和用户),我应该能够连接? 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密钥可以从私钥中提取出来。
我一直在寻找关于如何使用 php
建立与远程服务器的连接并执行命令的解决方案。研究使我注意到了两个解决方案; phpseclib
和 ssh2
。我会尽量避免将我的问题变成比较 post。据我所知,它们都是广泛使用的解决方案。 ssh2
是一个 php 扩展,而 phpseclib
是一个纯 php 库。看来 phpseclib
也可以和 ssh2
结合使用。我更愿意避免安装扩展,所以我更倾向于使用 phpseclib
。但是我确实有一些顾虑。
ssh2
有 php
的直接文档,这是否意味着它是更好的解决方案?
我看到的关于 phpseclib
的大多数 post 都已经有好几年了,这仍然是“现代”解决方案吗?
phpseclib
(found here) 表示它是为了与 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
密钥,我就可以简单地提供我的连接与我的本地私钥 (和用户),我应该能够连接? 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密钥可以从私钥中提取出来。