0

数据供应商已请求公共 SSH 密钥以使用其 SFTP 服务器。他们为我们提供了:

  • 用户名
  • 密码
  • 主机名
  • 港口

我正在尝试ssh2.sftp//使用私钥和用户名/密码在 php 中使用流包装器。我的代码如下:

$options = array(
    'ssh2' => array(
        'privkey_file' => '/path/to/priv_key',
    ),
);
$context = stream_context_create($options);
fopen('ssh2.sftp://<username>:<password>@<host>:<port>', 'rb', false, $context);

结果:

Warning: fopen(ssh2.sftp://...@<ip>...): failed to open stream: operation failed in ...

我可以使用 linux 的 sftp 命令进行连接,所以我知道连接可以正常工作并且凭据工作正常。

sftp -oPort=<port> -i /path/to/priv_key -v <username>@<host>

结果:

Authenticated with partial success.
password: <password-entered>
debug1: Authentication succeeded (password).
debug1: channel 0: new [client-session]
debug1: Sending subsystem: sftp
sftp>

有没有人有任何想法?

我对使用ssh2函数的想法持开放态度,但我强烈希望使用文件系统函数。

4

1 回答 1

0

老实说,我认为你最好使用phpseclib,一个纯 PHP SFTP 实现。除此之外,诊断问题比使用 libssh2 更容易。

此外,如果你想使用文件系统和流函数 phpseclib 也支持这些:

https://github.com/phpseclib/phpseclib/blob/master/phpseclib/Net/SFTP/Stream.php

于 2013-09-03T14:12:07.580 回答