ssh2://
ssh2:// — Secure Shell 2
Описание
ssh2.shell:// ssh2.exec:// ssh2.tunnel:// ssh2.sftp:// ssh2.scp:// PHP 4.3.0 и более поздние (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
Примеры
Пример #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() при выходе из области видимости (например, из функции).
- Функция file://() - Доступ к локальной файловой системе
- Функция http://() - Доступ к URL-адресам по протоколу HTTP(s)
- Функция ftp://() - Доступ к URL-адресам по протоколу FTP(s)
- Функция php://() - Доступ к различным потокам ввода-вывода
- Функция zlib://() - Сжатые потоки
- Функция data://() - Схема Data (RFC 2397)
- Функция glob://() - Нахождение путей, соответствующих шаблону
- Функция phar://() - PHP архив
- Функция ssh2://() - Secure Shell 2
- Функция rar://() - RAR
- Функция ogg://() - Аудио потоки
- Функция expect://() - Потоки для взаимодействия с процессами
Коментарии
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).
<?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";
}
?>
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');
?>