用PHP实现SFTP
phpseclib的汉语本土释义是?
如果使用phpseclib,就很容易。
$ composer require phpseclib/phpseclib:\*
<?php
require __DIR__ . '/vendor/autoload.php';
$sftp = new Net_SFTP('ore-no-server.example.com');
$keyfile = '/path/to/ore-no-key';
$key = new Crypt_RSA();
$key->loadKey(file_get_contents($keyfile));
if (!$sftp->login('ore', $key)) {
exit('Login Failed');
}
echo $sftp->pwd() . "\r\n";
$sftp->put('filename.ext', 'hello, world!');
print_r($sftp->nlist());
上述的例子是公钥认证,但是也可以通过以下方式进行密码认证。
<?php
require __DIR__ . '/vendor/autoload.php';
$sftp = new Net_SFTP('ore-no-server.example.com');
if (!$sftp->login('ore', 'ore-no-password')) {
exit('Login Failed');
}
echo $sftp->pwd() . "\r\n";
$sftp->put('filename.ext', 'hello, world!');
print_r($sftp->nlist());
phpseclib 2.0.0可以这样翻译:
根据 @kuwa72在评论中提出的指正,最新版本的2.0.0使用了命名空间,因此需要进行如下更改。
<?php
require __DIR__ . '/vendor/autoload.php';
use phpseclib\Net\SFTP;
use phpseclib\Crypt\RSA;
$sftp = new SFTP('ore-no-server.example.com');
$keyfile = '/path/to/ore-no-key';
$key = new RSA();
$key->loadKey(file_get_contents($keyfile));
if (!$sftp->login('ore', $key)) {
exit('Login Failed');
}
echo $sftp->pwd() . "\r\n";
$sftp->put('filename.ext', 'hello, world!');
print_r($sftp->nlist());
pecl ssh2 可以被改写为:ssh2 pecl
虽然有扩展功能,但因为感觉维护得不太好,所以我决定不去使用。
-
- https://pecl.php.net/package/ssh2
- http://php.net/ssh2