CakeFest 2024: The Official CakePHP Conference

ssh2://

ssh2://Secure Shell 2

Описание

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

Замечание: Эта обёртка не включена по умолчанию
Для того, чтобы использовать обёртки ssh2.*:// необходимо установить модуль » SSH2, доступный в репозитории » PECL.

Кроме получения традиционных данных для входа к URI, обёртки ssh2 также будут повторно использовать открытые соединения, передавая ресурс соединения в хост-часть URL.

Использование

  • ssh2.shell://user:pass@example.com:22/xterm
  • ssh2.exec://user:pass@example.com:22/usr/local/bin/somecmd
  • ssh2.tunnel://user:pass@example.com:22/192.168.0.1:14
  • ssh2.sftp://user:pass@example.com:22/path/to/filename

Опции

Основная информация
Атрибут 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() при выходе из области видимости (например, из функции).

add a note

User Contributed Notes 4 notes

up
7
exptom
10 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
6
bluej100 at gmail dot com
10 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
4
guilhem at no dot spam dot answeb dot net
6 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
-1
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