©
This document uses PHP Chinese website manual Release
ssh2:// — Secure Shell 2
ssh2.shell:// ssh2.exec:// ssh2.tunnel:// ssh2.sftp:// ssh2.scp:// PHP 4.3.0 and up (PECL)
Note: 该封装器默认没有激活
为了使用 ssh2.*:// 封装协议, 你必须安装来自 » PECL 的 » SSH2 扩展。
除了支持传统的 URI 登录信息,ssh2 封装协议也支持通过 URL 的主机(host)部分来复用打开连接。
Example #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' );
?>
Example #2 This $session variable must be kept available!
In order to use the ssh2.*://$session wrappers you must keep the $session resouce variable. The code below will not have the desired effect:
<?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() closes the session, because $connection_string does not hold a reference to the $session variable, just a string cast derived from it. This also happens when the unset() is implicit because of leaving scope (like in a function).
[#1] exptom [2013-06-30 09:37:50]
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).
[#2] bluej100 at gmail dot com [2013-05-07 22:42:42]
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.