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

search for in the

ssh2_exec> <ssh2_auth_pubkey_file
[edit] Last updated: Fri, 17 May 2013

view this page in

ssh2_connect

(PECL ssh2 >= 0.9.0)

ssh2_connectConnexion à un serveur SSH

Description

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

Établit une connexion à un serveur SSH distant.

Une fois connecté, le client doit vérifier la clé hôte du serveur en utilisant la fonction ssh2_fingerprint(), puis s'identifier en utilisant soit un mot de passe, soit une clé publique.

Liste de paramètres

host

port

methods

methods doit être un tableau associatif avec plus de quatre paramètres, comme décrit ci-dessous. methods peut contenir n'importe quel ou tous les paramètres suivants.

Options de connexion SSH
Index Signification Valeurs supportées *
kex La liste des méthodes d'échange à annoncer, séparées par une virgule, par ordre de préférence. diffie-hellman-group1-sha1, diffie-hellman-group14-sha1, et diffie-hellman-group-exchange-sha1
hostkey La liste des méthodes de clés d'hôte à annoncer, séparées par une virgule, par ordre de préférence. ssh-rsa et ssh-dss
client_to_server Tableau associatif contenant les codes des méthodes de chiffrement, de compression et de messages d'identification (MAC) préférés pour l'envoi des messages depuis le client vers le serveur.  
server_to_client Tableau associatif contenant les codes des méthodes de chiffrement, de compression et de messages d'identification (MAC) préférés pour l'envoi des messages depuis le serveur vers le client.  

* - Les valeurs supportées sont dépendantes des méthodes supportées par la bibliothèque. Voir la documentation » libssh2 pour plus d'informations.

client_to_server et server_to_client doivent être un tableau associatif avec n'importe quel ou tous les paramètres suivants.
Index Signification Valeurs supportées *
crypt Liste des méthodes de chiffrement à annoncer, séparées par une virgule, par ordre de préférence. rijndael-cbc@lysator.liu.se, aes256-cbc, aes192-cbc, aes128-cbc, 3des-cbc, blowfish-cbc, cast128-cbc, arcfour, et none**
comp Liste des méthodes de compression à annoncer, séparées par une virgule, par ordre de préférence. zlib et none
mac Liste des méthodes MAC à annoncer, séparées par une virgule, par ordre de préférence. hmac-sha1, hmac-sha1-96, hmac-ripemd160, hmac-ripemd160@openssh.com, et none**

Note: Chiffrement et méthode MAC "none"

Pour des raisons de sécurité, none est désactivé par la bibliothèque » libssh2 à moins qu'il soit activé explicitement durant la compilation en utilisant les options appropriées du ./configure. Voir la documentation sur la bibliothèque pour plus d'informations.

callbacks

callbackss doit être un tableau associatif contenant n'importe quel ou tous les paramètres suivants.

Paramètres de rappel
Index Signification Prototype
ignore Nom de la fonction à appeler lorsqu'un paquet SSH2_MSG_IGNORE est reçu void ignore_cb($message)
debug Nom de la fonction à appeler lorsqu'un paquet SSH2_MSG_DEBUG est reçu void debug_cb($message, $language, $always_display)
macerror Nom de la fonction à appeler lorsqu'un paquet est reçu mais que le code message d'identification échoue. Si le la fonction de rappel retourne TRUE, l'erreur sera ignorée, sinon, la connexion se terminera. bool macerror_cb($packet)
disconnect Nom de la fonction à appeler lorsqu'un paquet SSH2_MSG_DISCONNECT est reçu void disconnect_cb($reason, $message, $language)

Valeurs de retour

Retourne une ressource en cas de succès, ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec ssh2_connect()

Ouverture d'une connexion forçant 3des-cbc lors de l'envoi de paquets, n'importe quel chiffrement AES lors de la réception de paquets, aucune compression dans les deux directions, et un échange de clés Group1.

<?php
/* Notification à l'utilisateur si le serveur termine la connexion */
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('Échec de la connexion');
?>

Voir aussi



add a note add a note User Contributed Notes ssh2_connect - [2 notes]
up
0
Steve Kamerman
1 year ago
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_server_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('echo "EXITING" && exit;');
       
$this->connection = null;
    }
    public function
__destruct() {
       
$this->disconnect();
    }
}
?>

[EDIT BY danbrown AT php DOT net: Contains two bugfixes suggested by 'AlainC' in user note #109185 (removed) on 26-JUN-2012.]
up
0
suri dot suribala dot com
8 years ago
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 | sitemap | contact | advertising | mirror sites