ssh2://

ssh2://安全外壳 2

描述

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

注意: 此包装器默认情况下未启用
为了使用 ssh2.*:// 包装器,必须安装来自 » PECL» SSH2 扩展。

除了接受传统的 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() 由于离开作用域(例如在函数中)而隐式调用时,也会发生这种情况。

添加说明

用户贡献说明 4 个说明

8
exptom
11 年前
"password" 上下文选项还可以用来提供由 "privkey_file" 和 "pubkey_file" 提供的密钥文件的密码。

注意此错误: https://bugs.php.net/bug.php?id=58573
除非您使用 openssl 编译 libssh2,否则加密的密钥可能无法正常工作。(它只在我的 Debian Wheezy 上重新编译库后才对我有用)。
7
bluej100 at gmail dot com
11 年前
请注意,目前 opendir 在 sftp 根目录上已损坏,但您可以通过附加一个点来解决此问题。请参阅 https://bugs.php.net/bug.php?id=64169http://stackoverflow.com/a/16238476/69173.
5
guilhem at no dot spam dot answeb dot net
6 年前
请注意由 thomas at gielfeldt dot dk 指出的一个 PHP 错误,即您必须将连接变量 intval() 之后才能将其放入连接字符串中

<?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');
?>
0
thomas at gielfeldt dot dk
7 年前
<?php
// 使用公钥连接。
$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');
// 设置 sftp 流包装器
$sftp = ssh2_sftp($session);
// 参见: https://bugs.php.net/bug.php?id=73597
$connection_string = 'ssh2.sftp://' . intval($sftp);

// 列出远程主目录中的文件。
$i = new \RecursiveDirectoryIterator("$connection_string/home/remote-username");
$r = new \RecursiveIteratorIterator($i);
foreach (
$r as $f) {
print
$f->getPathname() . "\n";
}
?>
To Top