使用 PHP SSH2 打开流时使用 ~/.ssh/config



在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

相关内容

  • 没有找到相关文章

最新更新