2013-04-10 32 views
5

Windowsでコマンドを実行することを拒否するssh_exec()の問題の悪夢があります。ssh2_execが単純なコマンドを実行していません

<?php  
$connection = ssh2_connect('localhost', 22); 
ssh2_auth_none($connection, 'root'); 

$stream = ssh2_exec($connection, 'C:\Program Files\CCleaner\CCleaner.exe',FALSE);  
?> 

それは私に次の警告を示しています:Unable to request a channel from remote host in
は、ここに私のコードです。ヒントがあれば教えてください。ありがとうございました。

+0

: '(!$接続が){ ダイがあれば、( "接続に失敗しましたが。") } ' –

答えて

1

最初に、ssh2_connectを使用してWindowsサーバーに接続することはほとんどありません。なぜなら、SSHは通常はWindowsへの接続に使用されるプロトコルでもなく、Windowsインストールでも利用可能な項目ではないからです。 第2に、デフォルトでは存在しないため、Windowsサーバー上にユーザーrootを作成していることを確認してください。

また あなたが実際にあなたがそれにWindowsのコマンドを実行しようとしているという事実( 'C、その後、 WindowsのボックスからのUnix/Linuxサーバに接続している場合:\プログラムファイル\ CCleanerは\ CCleaner.exe ')、失敗します。 Linuxは、Windowsとはまったく異なるファイルシステム構造を持っているため、「C:\」で始まるコマンドは明らかに失敗します。だから、あなたはおそらく(パスワードなしでユーザ名「ルート」を使用してLinuxサーバに接続しようとしているように見えます上記のコードから

たPHP.netのマニュアル(ssh2_auth_noneによると:

しかし、Windowsでコマンドを実行しようとしていて、ホスト名が「localhost」のサーバーに接続しようとしているとします(おそらく、失敗するはずです)。あなたは実際にこれをWindows上で実行しており、単にSSHを使ってWindowsサーバーに接続しようとしています上記のPHPコードが既にWindowsサーバー上で実行されているため、SSH接続は完全に冗長になります(ただし、 'root'として)特権を持つコマンドを実行しようとする場合を除きます。

リモートおそらく悪い考えである管理者ユーザ、としてPHP を使用してコマンドを実行しようとしている場合は、Windowsのrunas commandとの組み合わせでfunction.exec.phpコマンドを使用することを検討してください可能性があります。あるいは、Webサーバーを管理者として実行することもできます。これは非常に簡単で、セキュリティには非常に悪いです。

Windows上にSSHサーバーをインストールすることで、基本的には何をしようとしているのでしょうか(What are some good SSH Servers for windows?) - その後、そのユーザーのパスワードを使用してサーバーにログインしなければなりません(またはユーザーのルートを作成して使用します)。 SSHサーバーのインストールによっては、上記のようにコマンドC:\Program Files\CCleaner\CCleaner.exeを実行することができます。

Linuxではこの取り掛かる方法のより多くの例がありますが、異なる方法が異なる長所と短所を持っています。これを追加した結果何

0
<?php  
$connection = ssh2_connect('localhost', 22); 
ssh2_auth_none($connection, 'root'); 

$stream = ssh2_exec($connection, 'C:\Program Files\CCleaner\CCleaner.exe', false); 
stream_set_blocking ($stream, true); 
関連する問題