2012-10-08 18 views
2

在PHP中處理SSH2流時,在某種程度上可以使用用戶的SSH客戶端配置嗎?在大多數系統上,它存儲在〜/ .ssh/config中。當用PHP打開流時使用〜/ .ssh/config SSH2

在我的情況下,我有幾個別名配置在我的SSH配置。但是,當我嘗試在我的PHP代碼中使用這些別名時,它們不起作用。

實例的〜/ .ssh/config中

Host foo 
    HostName my.server 
    Port 22 
    User sander 
    IdentityFile ~/.ssh/id_rsa 

示例PHP代碼失敗了,但我想獲得工作:如果您檢查源代碼的SSH2

<?php 
$text = file_get_contents('ssh2.sftp://foo/bar.txt'); 
+0

組權限會得到荒謬 – wesside

+0

@bigman:爲什麼會是這樣? –

回答

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'); 
+0

這是一個整潔的想法。不幸的是,我正在處理一個使用'file_get_contents()'的外部庫,因此在其中添加一個自定義分析器並不容易。 –

+0

這是流包裝的用途。 – hakre

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);