downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

ssh2_exec> <ssh2_auth_pubkey_file
[edit] Last updated: Fri, 25 May 2012

view this page in

ssh2_connect

(PECL ssh2 >= 0.9.0)

ssh2_connectSSH サーバーに接続する

説明

resource ssh2_connect ( string $host [, int $port = 22 [, array $methods [, array $callbacks ]]] )

リモートの SSH サーバーとの接続を確立します。

一度接続すると、クライアントは ssh2_fingerprint() を使用してサーバーのホスト鍵を検証し、 パスワードもしくは公開鍵を使用して認証します。

パラメータ

host

port

methods

methods は以下に示された4つのパラメータを持つ連想配列です。

methods は以下のパラメータのいくつかあるいは全てを含む連想配列
インデックス 意味 サポートする値*
kex 通知する鍵交換メソッドのリスト。優先する順にカンマ区切りにする。 diffie-hellman-group1-sha1diffie-hellman-group14-sha1 および diffie-hellman-group-exchange-sha1
hostkey 通知するホスト鍵メソッドのリスト。優先する順にカンマ区切りにする。 ssh-rsa および ssh-dss
client_to_server クライアントからサーバーに送信されるメッセージのために優先する暗号化、 圧縮、メッセージ認証コード (MAC) メソッドを含む連想配列。  
server_to_client サーバーからクライアントに送信されるメッセージのために優先する暗号化、 圧縮、メッセージ認証コード (MAC) メソッドを含む連想配列。  

* - サポートする値は、 構成するライブラリがサポートしているメソッドに依存します。 追加情報については » libssh2 ドキュメントを参照ください。

client_to_serverserver_to_client は以下のパラメータのいくつかあるいは全てを含む連想配列
インデックス 意味 サポートする値*
crypt 通知する暗号化メソッドのリスト。 優先する順にカンマ区切りにする。 rijndael-cbc@lysator.liu.seaes256-cbcaes192-cbcaes128-cbc3des-cbcblowfish-cbccast128-cbcarcfour および none**
comp 通知する圧縮メソッドのリスト。 優先する順にカンマ区切りにする。 zlib および none
mac 通知する MAC メソッドのリスト。 優先する順にカンマ区切りにする。 hmac-sha1hmac-sha1-96hmac-ripemd160hmac-ripemd160@openssh.com および none**

注意: 暗号化、MAC メソッドの "none"

セキュリティ上の問題で、none は ビルド時に適切な ./configure オプションを使用して明示的に有効にしない限り、構成している » libssh2 によって無効にされます。 詳細は構成するライブラリのドキュメントを参照ください。

callbacks

callbacks は以下のパラメータのいくつかあるいは全てを含む連想配列

コールバックパラメータ
インデックス 意味 プロトタイプ
ignore SSH2_MSG_IGNORE パケットを受信したときにコールする関数名 void ignore_cb($message)
debug SSH2_MSG_DEBUG パケットを受信したときにコールする関数名 void debug_cb($message, $language, $always_display)
macerror パケットを受信したがメッセージ認証コードに失敗した場合にコールされる関数名。 もしコールバックが TRUE を返す場合、不整合は無視されます。 そうでない場合、接続は終了します。 bool macerror_cb($packet)
disconnect SSH2_MSG_DISCONNECT パケットを受信したときにコールする関数名 void disconnect_cb($reason, $message, $language)

返り値

成功した場合にリソース、エラー時に FALSE を返します。

例1 ssh2_connect() の例

パケット送信時に 3des-cbc 、 パケット受信時に任意の強度の aes cipher、 両方向で無圧縮、 Group1 での鍵交換という設定で強制的に接続をオープンします。

<?php
/* もしサーバーが接続を終了した場合、ユーザーに通知する */
function my_ssh_disconnect($reason$message$language) {
  
printf("Server disconnected with reason code [%d] and message: %s\n",
         
$reason$message);
}

$methods = array(
  
'kex' => 'diffie-hellman-group1-sha1',
  
'client_to_server' => array(
    
'crypt' => '3des-cbc',
    
'comp' => 'none'),
  
'server_to_client' => array(
    
'crypt' => 'aes256-cbc,aes192-cbc,aes128-cbc',
    
'comp' => 'none'));

$callbacks = array('disconnect' => 'my_ssh_disconnect');

$connection ssh2_connect('shell.example.com'22$methods$callbacks);
if (!
$connection) die('Connection failed');
?>

参考



add a note add a note User Contributed Notes ssh2_connect
Steve Kamerman 05-Jul-2011 09:06
Due to a lack of complete examples, here's a simple SSH2 class for connecting to a server, authenticating with public key authentication, verifying the server's fingerprint, issuing commands and reading their STDOUT and properly disconnecting.  Note: You may need to make sure you commands produce output so the response can be pulled.  Some people suggest that the command is not executed until you pull the response back.
<?php
class NiceSSH {
   
// SSH Host
   
private $ssh_host = 'myserver.example.com';
   
// SSH Port
   
private $ssh_port = 22;
   
// SSH Server Fingerprint
   
private $ssh_server_fp = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
   
// SSH Username
   
private $ssh_auth_user = 'username';
   
// SSH Public Key File
   
private $ssh_auth_pub = '/home/username/.ssh/id_rsa.pub';
   
// SSH Private Key File
   
private $ssh_auth_priv = '/home/username/.ssh/id_rsa';
   
// SSH Private Key Passphrase (null == no passphrase)
   
private $ssh_auth_pass;
   
// SSH Connection
   
private $connection;
   
    public function
connect() {
        if (!(
$this->connection = ssh2_connect($this->ssh_host, $this->ssh_port))) {
            throw new
Exception('Cannot connect to server');
        }
       
$fingerprint = ssh2_fingerprint($this->connection, SSH2_FINGERPRINT_MD5 | SSH2_FINGERPRINT_HEX);
        if (
strcmp($this->ssh_master_fp, $fingerprint) !== 0) {
            throw new
Exception('Unable to verify server identity!');
        }
        if (!
ssh2_auth_pubkey_file($this->connection, $this->ssh_auth_user, $this->ssh_auth_pub, $this->ssh_auth_priv, $this->ssh_auth_pass)) {
            throw new
Exception('Autentication rejected by server');
        }
    }
    public function
exec($cmd) {
        if (!(
$stream = ssh2_exec($this->connection, $cmd))) {
            throw new
Exception('SSH command failed');
        }
       
stream_set_blocking($stream, true);
       
$data = "";
        while (
$buf = fread($stream, 4096)) {
           
$data .= $buf;
        }
       
fclose($stream);
        return
$data;
    }
    public function
disconnect() {
       
$this->exec($this->connection, 'echo "EXITING" && exit;');
       
$this->connection = null;
    }
    public function
__destruct() {
       
$this->disconnect();
    }
}
?>
suri dot suribala dot com 23-Feb-2005 10:00
With Sara's help, I have the following SS2 class that is quite flexible. If anyone improves it, please feel free to let me know.

<?php

// ssh protocols
// note: once openShell method is used, cmdExec does not work

class ssh2 {

  private
$host = 'host';
  private
$user = 'user';
  private
$port = '22';
  private
$password = 'password';
  private
$con = null;
  private
$shell_type = 'xterm';
  private
$shell = null;
  private
$log = '';

  function
__construct($host='', $port=''  ) {

     if(
$host!='' ) $this->host  = $host;
     if(
$port!='' ) $this->port  = $port;

    
$this->con  = ssh2_connect($this->host, $this->port);
     if( !
$this->con ) {
      
$this->log .= "Connection failed !";
     }

  }

  function
authPassword( $user = '', $password = '' ) {

     if(
$user!='' ) $this->user  = $user;
     if(
$password!='' ) $this->password  = $password;

     if( !
ssh2_auth_password( $this->con, $this->user, $this->password ) ) {
      
$this->log .= "Authorization failed !";
     }

  }

  function
openShell( $shell_type = '' ) {

        if (
$shell_type != '' ) $this->shell_type = $shell_type;
   
$this->shell = ssh2_shell( $this->con$this->shell_type );
    if( !
$this->shell ) $this->log .= " Shell connection failed !";

  }

  function
writeShell( $command = '' ) {

   
fwrite($this->shell, $command."\n");

  }

  function
cmdExec( ) {

       
$argc = func_num_args();
       
$argv = func_get_args();

   
$cmd = '';
    for(
$i=0; $i<$argc ; $i++) {
        if(
$i != ($argc-1) ) {
         
$cmd .= $argv[$i]." && ";
        }else{
         
$cmd .= $argv[$i];
        }
    }
    echo
$cmd;

       
$stream = ssh2_exec( $this->con, $cmd );
   
stream_set_blocking( $stream, true );
    return
fread( $stream, 4096 );

  }

  function
getLog() {

     return
$this->log;

  }

}

?>

 
show source | credits | stats | sitemap | contact | advertising | mirror sites