ssh2:// — Secure Shell 2
ssh2.shell:// ssh2.exec:// ssh2.tunnel:// ssh2.sftp:// ssh2.scp:// (PECL)
Замечание: Эта обёртка не включена по умолчанию
Чтобы использовать обёртки ssh2.*://, необходимо установить модуль » SSH2 из репозитория » PECL.
Помимо принятия традиционных данных для входа по URI-идентификатору, обёртки ssh2 также будут повторно использовать открытые соединения, передавая ресурс соединения в хост-часть URL.
| Атрибут | ssh2.shell | ssh2.exec | ssh2.tunnel | ssh2.sftp | ssh2.scp |
|---|---|---|---|---|---|
| Ограничение по allow_url_fopen | Да | Да | Да | Да | Да |
| Чтение | Да | Да | Да | Да | Да |
| Запись | Да | Да | Да | Да | Нет |
| Добавление | Нет | Нет | Нет | Да (когда поддерживается сервером) | Нет |
| Одновременная чтение и запись | Да | Да | Да | Да | Нет |
| Поддержка stat() | Нет | Нет | Нет | Да | Нет |
| Поддержка unlink() | Нет | Нет | Нет | Да | Нет |
| Поддержка rename() | Нет | Нет | Нет | Да | Нет |
| Поддержка mkdir() | Нет | Нет | Нет | Да | Нет |
| Поддержка rmdir() | Нет | Нет | Нет | Да | Нет |
| Имя | Использование | По умолчанию |
|---|---|---|
session |
Предварительно соединённый ресурс ssh2 для повторного использования | |
sftp |
Предварительно выделенный ресурс sftp для повторного использования | |
methods |
Обмен ключами, ключ хоста, шифр, компрессия и методы MAC для использования | |
callbacks |
||
username |
Имя пользователя для соединения | |
password |
Пароль для аутентификации | |
pubkey_file |
Имя файла, в котором находится открытый ключ для аутентификации | |
privkey_file |
Имя файла, в котором находится приватный ключ для аутентификации | |
env |
Ассоциативный массив с переменными окружения, которые необходимо установить | |
term |
Тип эмуляции терминала для запроса, когда выделяется pty | |
term_width |
Ширина терминала, запрашивается когда выделяется pty | |
term_height |
Высота терминала, запрашивается когда выделяется pty | |
term_units |
Единицы, в которых измеряются term_width и term_height | SSH2_TERM_UNIT_CHARS |
Пример #1 Открытие потока из активного соединения
<?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');
?>Пример #2 Переменная $session должна быть доступна!
Для использования каких-либо из обёрток ssh2.*://$session, необходимо сохранить доступным ресурс, хранящийся в переменной $session. Следующий код не будет иметь желаемого эффекта:
<?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() закрывает сессию, потому что $connection_string не является ссылкой на переменную $session, а только её текстовым представлением. Это также происходит и в случае неявного вызова unset() при выходе из области видимости (например, из функции).
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. 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).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');
?><?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";
}
?>