数据供应商已请求使用其SFTP服务器的公共SSH密钥。他们向我们提供了:
- 用户名
- 密码
- 主机名
- 端口
我正试图使用私钥和用户名/密码在php中使用流包装器ssh2.sftp//
。我的代码如下:
$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函数的想法持开放态度,但我强烈希望使用文件系统和流函数。
老实说,我认为您最好使用phpseclib,一个纯PHP SFTP实现。除其他外,使用它比使用libssh2更容易诊断问题。
此外,如果您想使用文件系统和流函数,phpseclib也支持这些:
https://github.com/phpseclib/phpseclib/blob/master/phpseclib/Net/SFTP/Stream.php