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

时间:2012-10-08 13:13:55

标签: php ssh stream

在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 个答案:

答案 0 :(得分:2)

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

然后连接这些设置。

如果您想要完整的例子:

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

这更复杂,我认为甚至不可能。但是,如果你改变了前缀,你应该能够将你的实现注入a stream wrapper you register,它围绕ssh2包装器“包裹”,所以它的使用同样是直截了当的:

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

答案 1 :(得分: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);

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

对于php版本&lt; 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