2

在 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');
4

4 回答 4

2

是的,这是完全可能的。该文件的文件格式已指定。您需要做的就是为它编写一个解析器(也许这已经写过了,至少类似的东西),然后使用您的主机名(这里:)foo来访问该配置。

然后你连接这些设置。

如果你想有你的例子:

$text = file_get_contents('ssh2.sftp://foo/bar.txt');

这更复杂,我认为甚至不可能。但是,如果您更改前缀,您应该能够将您的实现作为您注册的流包装器注入,它“包装”在 ssh2 包装器周围,因此它的使用同样简单:

$text = file_get_contents('my.ssh2.sftp://foo/bar.txt');
于 2012-10-08T20:35:16.293 回答
2
$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);
于 2013-10-23T11:42:11.230 回答
1

如果您在http://pecl.php.net/package/ssh2查看 ssh2 包装器的源代码,它们似乎根本不支持别名。

发布到他们的邮件列表中,可能很容易添加别名支持。

于 2012-10-08T13:41:03.670 回答
0

对于 < 7 的 php 版本,使用 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

于 2017-08-15T11:07:23.863 回答