我一直在寻找如何使用
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
密钥,我就可以简单地提供与我的本地私钥(和用户)的连接,我应该能够连接?公钥需要放在特定的地方吗?
https://travis-ci.org/github/phpseclib/phpseclib
(旧版本的 PHP 未经过单元测试,因为 Travis CI 不支持它们;可以使用 Docker 容器,但是是的)
我对对于 OpenSSH 服务器,公钥需要位于 ~/.ssh/authorized_keys 中。在客户端,您真正需要的只是私钥。可以从私钥中提取公钥。
ssh
仍然相当陌生,但如果我正确理解上述内容,只要远程服务器有一个.pub
密钥,我就可以简单地提供与我的本地私钥(和用户)的连接,我应该能够连接?公钥需要放在特定的地方吗?
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');