PHP Conference Nagoya 2025

ssh2://

ssh2://Shell Seguro 2

Descrição

ssh2.shell:// ssh2.exec:// ssh2.tunnel:// ssh2.sftp:// ssh2.scp:// (PECL)

Nota: Este empacotador não é habilitado por padrão.
Para utilizar os empacotadores ssh2.*://, a extensão » SSH2 disponível em » PECL deve estar instalada.

Além de aceitar detalhes de login URI tradicionais, os empacotadores ssh2 também farão reúso de conexões abertas através da passagem do recurso da conexão na parte do host da URL.

Uso

  • ssh2.shell://usuario:senha@example.com:22/xterm
  • ssh2.exec://usuario:senha@example.com:22/usr/local/bin/algumcomando
  • ssh2.tunnel://usuario:senha@example.com:22/192.168.0.1:14
  • ssh2.sftp://usuario:senha@example.com:22/caminho/para/arquivo

Opções

Sumário do Empacotador
Atributo ssh2.shell ssh2.exec ssh2.tunnel ssh2.sftp ssh2.scp
Restrito por allow_url_fopen Sim Sim Sim Sim Sim
Permite Leitura Sim Sim Sim Sim Sim
Permite Escrita Sim Sim Sim Sim Não
Permite Adição Não Não Não Sim (quando suportado pelo servidor) Não
Permite Leitura e Escrita Simultâneas Sim Sim Sim Sim Não
Suporta stat() Não Não Não Sim Não
Suporta unlink() Não Não Não Sim Não
Suporta rename() Não Não Não Sim Não
Suporta mkdir() Não Não Não Sim Não
Suporta rmdir() Não Não Não Sim Não

Opções de contexto
Nome Uso Padrão
session Recurso ssh2 pré-conectado a ser reutilizado  
sftp Recurso sftp pré-alocado a ser reutilizado  
methods Métodos de troca de chaves, de chave de host, de cifras, de compressão e de MAC a serem usados  
callbacks    
username Nome de usuário a ser conectado  
password Senha a ser usada com a autenticação  
pubkey_file Nome do arquivo de chave pública a ser usado com a autenticação  
privkey_file Nome do arquivo de chave privada a ser usado com a autenticação  
env Array associativo de variáveis de ambiente a ser configurado  
term Tipo de emulação de terminal a ser requisitado quando da alocação de um pty  
term_width Largura do terminal requisitado quando da alocação de um pty  
term_height Altura do terminal requisitado quando da alocação de um pty  
term_units Unidadem usadas em term_width e term_height SSH2_TERM_UNIT_CHARS

Exemplos

Exemplo #1 Abrindo um fluxo para conexão ativa

<?php
$session
= ssh2_connect('example.com', 22);
ssh2_auth_pubkey_file($session, 'username', '/home/username/.ssh/id_rsa.pub',
'/home/username/.ssh/id_rsa', 'secret');
$stream = fopen("ssh2.tunnel://$session/remote.example.com:1234", 'r');
?>

Exemplo #2 Esta variável $session deve ser mantida disponível!

Para usar os empacotadores ssh2.*://$session, a variável de recurso $session deve ser mantida. O código abaixo não terá o efeito desejado:

<?php
$session
= ssh2_connect('example.com', 22);
ssh2_auth_pubkey_file($session, 'username', '/home/username/.ssh/id_rsa.pub',
'/home/username/.ssh/id_rsa', 'secret');
$connection_string = "ssh2.sftp://$session/";
unset(
$session);
$stream = fopen($connection_string . "path/to/file", 'r');
?>

unset() fecha a sessão, porque $connection_string não contém uma referência à variável $session, somente uma string convertida derivada dela. Isto também acontece quando a função unset() está implícita devido a uma saída de escopo (como em uma função).

adicione uma nota

Notas Enviadas por Usuários (em inglês) 4 notes

up
8
exptom
11 years ago
The "password" context option can also be used to provide the passphrase for the keyfile supplied by "privkey_file" and "pubkey_file".

Note this bug: https://bugs.php.net/bug.php?id=58573
Encrypted keys may not work unless you build libssh2 against openssl. (It only worked for me on Debian Wheezy once I recompiled the library).
up
7
bluej100 at gmail dot com
11 years ago
Be aware that opendir is currently broken on sftp root directories, but you can work around it by appending a dot. See https://bugs.php.net/bug.php?id=64169 and http://stackoverflow.com/a/16238476/69173.
up
5
guilhem at no dot spam dot answeb dot net
7 years ago
Please beware of a PHP bug, noted by thomas at gielfeldt dot dk, that you must intval() the connection variable before putting it in the connection string :

<?php
$connection
= ssh2_connect('shell.example.com', 22);
ssh2_auth_password($connection, 'username', 'password');
$sftp = ssh2_sftp($connection);
// See: https://bugs.php.net/bug.php?id=73597
$stream = fopen("ssh2.sftp://" . intval($sftp) . "/path/to/file", 'r');
?>
up
0
thomas at gielfeldt dot dk
7 years ago
<?php
// Connect with public key.
$session = ssh2_connect('example.com', 22);
$result = ssh2_auth_pubkey_file($session, 'remote-username', '/home/local-username/.ssh/id_rsa.pub',
'/home/local-username/.ssh/id_rsa',
'secret');
// Setup sftp stream wrapper
$sftp = ssh2_sftp($session);
// See: https://bugs.php.net/bug.php?id=73597
$connection_string = 'ssh2.sftp://' . intval($sftp);

// List files in remote homedir.
$i = new \RecursiveDirectoryIterator("$connection_string/home/remote-username");
$r = new \RecursiveIteratorIterator($i);
foreach (
$r as $f) {
print
$f->getPathname() . "\n";
}
?>
To Top