在PHP中处理SSH2流时,是否可以以某种方式使用用户的SSH客户端配置?在大多数系统上,它存储在 ~/.ssh/config 中。
就我而言,我在SSH配置中配置了几个别名。但是,当我尝试在我的PHP代码中使用这些别名时,它们不起作用。
示例 ~/.ssh/config
Host foo
HostName my.server
Port 22
User sander
IdentityFile ~/.ssh/id_rsa
失败但我想开始工作的 PHP 代码示例:
<?php
$text = file_get_contents('ssh2.sftp://foo/bar.txt');
是的,这是完全可能的。指定该文件的文件格式。您需要做的就是为它编写一个解析器(也许已经编写了,至少是类似的东西),然后使用您的主机名(此处:foo
)来访问该配置。
然后使用这些设置进行连接。
如果你想完全有你的例子:
$text = file_get_contents('ssh2.sftp://foo/bar.txt');
这更复杂,我认为甚至是不可能的。但是,如果您更改前缀,您应该能够将实现注入为您注册的流包装器注入,该包装器"包装"在 ssh2 包装器周围,因此它的使用同样简单明了:
$text = file_get_contents('my.ssh2.sftp://foo/bar.txt');
$userName =username;
$password = password;
$domain = domain;
$connection = ssh2_connect($domain, 22);
ssh2_auth_password($connection, $userName, $password);
$sftp =ssh2_sftp($connection);
$content = file_get_contents("ssh2.sftp://{$sftp}{$sourceFile}");
$data = $content ."new content";
$content = file_put_contents("ssh2.sftp://{$sftp}{$sourceFile}",$data);
如果您在 http://pecl.php.net/package/ssh2 检查 ssh2 包装器的源代码,它们似乎根本不支持别名。
发布到他们的邮件列表中,别名支持可能很容易添加。
对于 php 版本 <7,请使用 intval()
$sftpConnection = ssh2_connect($host);
$sftp = ssh2_sftp($sftpConnection);
$fp = fopen("ssh2.sftp://" . intval($sftp) . $remoteFile, "r");
https://bugs.php.net/bug.php?id=73597