在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');
答案 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");