php8.5
Home/ Manual/ language / wrappers/ ssh2://

ssh2://

PHP function Edit on GitHub ✎

Secure Shell 2

Description

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

Note

In order to use the ssh2.*:// wrappers, the SSH2 extension available from Pecl must be installed.

In addition to accepting traditional URI login details, the ssh2 wrappers will also reuse open connections by passing the connection resource in the host portion of the URL.

Usage

  • 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

Options

Attributessh2.shellssh2.execssh2.tunnelssh2.sftpssh2.scp
Restricted by allow_url_fopenYesYesYesYesYes
Allows ReadingYesYesYesYesYes
Allows WritingYesYesYesYesNo
Allows AppendingNoNoNoYes (When supported by server)No
Allows Simultaneous Reading and WritingYesYesYesYesNo
Supports stat()NoNoNoYesNo
Supports unlink()NoNoNoYesNo
Supports rename()NoNoNoYesNo
Supports mkdir()NoNoNoYesNo
Supports rmdir()NoNoNoYesNo
NameUsageDefault
sessionPreconnected ssh2 resource to be reused
sftpPreallocated sftp resource to be reused
methodsKey exchange, hostkey, cipher, compression, and MAC methods to use
callbacks
usernameUsername to connect as
passwordPassword to use with password authentication
pubkey_fileName of public key file to use for authentication
privkey_fileName of private key file to use for authentication
envAssociate array of environment variables to set
termTerminal emulation type to request when allocating a pty
term_widthWidth of terminal requested when allocating a pty
term_heightHeight of terminal requested when allocating a pty
term_unitsUnits to use with term_width and term_heightSSH2_TERM_UNIT_CHARS

Examples

Opening a stream from an active connection

php
<?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');
?>

This $session variable must be kept available!

In order to use the ssh2.*://$session wrappers, the $session resource variable must be kept. The code below will not have the desired effect:

php
<?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).

Source: language/wrappers/ssh2.xml · from the official PHP manual (php/doc-en)