Documentation

SSH2
in package

Pure-PHP implementation of SSHv2.

Tags
author

Jim Wigginton terrafrost@php.net

access

public

Table of Contents

CHANNEL_AGENT_FORWARD  = 4
CHANNEL_EXEC  = 1
CHANNEL_KEEP_ALIVE  = 5
CHANNEL_SHELL  = 2
CHANNEL_SUBSYSTEM  = 3
LOG_COMPLEX  = 2
Returns the message content
LOG_MAX_SIZE  = 1048576
Make sure that the log never gets larger than this
LOG_REALTIME  = 3
Outputs the content real-time
LOG_REALTIME_FILE  = 4
Dumps the content real-time to a file
LOG_SIMPLE  = 1
Returns the message numbers
MASK_CONNECTED  = 0x2
MASK_CONSTRUCTOR  = 0x1
MASK_LOGIN  = 0x8
MASK_LOGIN_REQ  = 0x4
MASK_SHELL  = 0x10
MASK_WINDOW_ADJUST  = 0x20
READ_NEXT  = 3
Returns whenever a data packet is received.
READ_REGEX  = 2
Returns when a string matching the regular expression $expect is found
READ_SIMPLE  = 1
Returns when a string matching $expect exactly is found
$agent  : System_SSH_Agent
A System_SSH_Agent for use in the SSH2 Agent Forwarding scenario
$auth  : array<string|int, mixed>
Authentication Credentials
$bad_key_size_fix  : bool
Some versions of OpenSSH incorrectly calculate the key size
$banner_message  : string
Banner Message
$binary_packet_buffer  : string|false
Binary Packet Buffer
$bitmap  : int
Execution Bitmap
$channel_buffers  : array<string|int, mixed>
Channel Buffers
$channel_extended_data_type_codes  : array<string|int, mixed>
SSH_MSG_CHANNEL_EXTENDED_DATA's data_type_codes
$channel_open_failure_reasons  : array<string|int, mixed>
SSH_MSG_CHANNEL_OPEN_FAILURE 'reason codes', defined in RFC4254
$channel_status  : array<string|int, mixed>
Channel Status
$compression_algorithms_client_to_server  : array<string|int, mixed>|false
Compression Algorithms: Client to Server
$compression_algorithms_server_to_client  : array<string|int, mixed>|false
Compression Algorithms: Server to Client
$crypto_engine  : int
Crypto Engine
$curTimeout  : mixed
Current Timeout
$decrypt  : object
Server to Client Encryption Object
$decrypt_block_size  : int
Block Size for Client to Server Encryption
$disconnect_reasons  : array<string|int, mixed>
Disconnection Message 'reason codes' defined in RFC4253
$encrypt  : object
Client to Server Encryption Object
$encrypt_block_size  : int
Block Size for Server to Client Encryption
$encryption_algorithms_client_to_server  : array<string|int, mixed>|false
Encryption Algorithms: Client to Server
$encryption_algorithms_server_to_client  : array<string|int, mixed>|false
Encryption Algorithms: Server to Client
$errors  : string
Error information
$exchange_hash  : string
Exchange hash
$exit_status  : int
Exit status returned from ssh if any
$fsock  : object
The Socket Object
$get_seq_no  : int
Get Sequence Number
$hmac_check  : object
Server to Client HMAC Object
$hmac_create  : object
Client to Server HMAC Object
$hmac_size  : int
Size of server to client HMAC
$host  : string
Hostname
$identifier  : string
The SSH identifier
$in_request_pty_exec  : bool
Flag set while exec() is running when using enablePTY()
$in_subsystem  : bool
Flag set after startSubsystem() is called
$interactiveBuffer  : array<string|int, mixed>
Interactive Buffer
$is_timeout  : bool
Did read() timeout or return normally?
$kex_algorithm  : string|false
Key Exchange Algorithm
$kex_algorithms  : array<string|int, mixed>|false
Key Exchange Algorithms
$kex_dh_group_size_max  : int
Maximum Diffie-Hellman Group Bit Size in RFC 4419 Key Exchange Methods
$kex_dh_group_size_min  : int
Minimum Diffie-Hellman Group Bit Size in RFC 4419 Key Exchange Methods
$kex_dh_group_size_preferred  : int
Preferred Diffie-Hellman Group Bit Size in RFC 4419 Key Exchange Methods
$keyboard_requests_responses  : array<string|int, mixed>
Keyboard Interactive Request / Responses
$languages_client_to_server  : array<string|int, mixed>|false
Languages: Client to Server
$languages_server_to_client  : array<string|int, mixed>|false
Languages: Server to Client
$last_interactive_response  : string
The Last Interactive Response
$last_packet  : int
Time of first network activity
$log_boundary  : string
Log Boundary
$log_long_width  : int
Log Long Width
$log_short_width  : int
Log Short Width
$log_size  : int
Current log size
$mac_algorithms_client_to_server  : array<string|int, mixed>|false
MAC Algorithms: Client to Server
$mac_algorithms_server_to_client  : array<string|int, mixed>|false
MAC Algorithms: Server to Client
$message_log  : array<string|int, mixed>
Message Log
$message_number_log  : array<string|int, mixed>
Message Number Log
$message_numbers  : array<string|int, mixed>
Message Numbers
$packet_size_client_to_server  : array<string|int, mixed>
Packet Size
$port  : int
Port Number
$preferred  : array<string|int, mixed>
Preferred Algorithms
$preferred_signature_format  : string|false
Preferred Signature Format
$quiet_mode  : mixed
Flag to suppress stderr from output
$realtime_log_file  : resource
Real-time log file pointer
$realtime_log_size  : int
Real-time log file size
$realtime_log_wrap  : mixed
Real-time log file wrap boolean
$request_pty  : bool
Flag to request a PTY when using exec()
$retry_connect  : bool
Should we try to re-connect to re-establish keys?
$send_id_string_first  : bool
Send the identification string first?
$send_kex_first  : bool
Send the key exchange initiation packet first?
$send_seq_no  : int
Send Sequence Number
$server_channels  : array<string|int, mixed>
Server Channels
$server_host_key_algorithms  : array<string|int, mixed>|false
Server Host Key Algorithms
$server_identifier  : array<string|int, mixed>|false
Server Identifier
$server_public_host_key  : string
Server Public Host Key
$session_id  : string
Session identifier
$signature  : string
Server signature
$signature_format  : string
Server signature format
$signature_validated  : bool
Has the signature been validated?
$stdErrorLog  : string
Contents of stdError
$terminal_modes  : array<string|int, mixed>
Terminal Modes
$timeout  : mixed
Timeout
$window_resize  : int
What we resize the window to
$window_size  : int
The Window Size
$window_size_client_to_server  : array<string|int, mixed>
Window size, client to server
$window_size_server_to_client  : array<string|int, mixed>
Window size, server to client
$windowColumns  : int
Number of columns for terminal window size
$windowRows  : int
Number of columns for terminal window size
__construct()  : SSH2
Default Constructor.
__destruct()  : mixed
Destructor.
_append_log()  : mixed
Logs data packets
_array_intersect_first()  : mixed
Returns the first value of the intersection of two arrays or false if the intersection is empty. The order is defined by the first parameter.
_bad_algorithm_candidate()  : bool
Tests whether or not proposed algorithm has a potential for issues
_close_channel()  : bool
Closes and flushes a channel
_connect()  : bool
Connect to an SSHv2 server
_define_array()  : mixed
Define Array
_disconnect()  : bool
Disconnect
_encryption_algorithm_to_crypt_instance()  : mixed
Maps an encryption algorithm name to an instance of a subclass of \phpseclib\Crypt\Base.
_encryption_algorithm_to_key_size()  : int|null
Maps an encryption algorithm name to the number of key bytes.
_filter()  : string
Filter Binary Packets
_format_log()  : string
Formats a log for printing
_format_log_helper()  : string
Helper function for _format_log
_generate_identifier()  : string
Generates the SSH identifier
_get_binary_packet()  : string
Gets Binary Packets
_get_channel_packet()  : mixed
Gets channel data
_get_interactive_channel()  : int
Return the channel to be used with read() / write()
_get_open_channel()  : int
Return an available open channel
_initShell()  : bool
Creates an interactive shell
_key_exchange()  : mixed
Key Exchange
_keyboard_interactive_login()  : bool
Login via keyboard-interactive authentication
_keyboard_interactive_process()  : bool
Handle the keyboard-interactive requests / responses.
_login()  : bool
Login Helper
_on_channel_open()  : mixed
Helper function for agent->_on_channel_open()
_reconnect()  : bool
In situ reconnect method
_reset_connection()  : mixed
Resets a connection for re-use
_send_binary_packet()  : bool
Sends Binary Packets
_send_channel_packet()  : bool
Sends channel data
_ssh_agent_login()  : bool
Login with an ssh-agent provided key
_string_shift()  : string
String Shift
_updateLogHistory()  : mixed
Update packet types in log history
disablePTY()  : mixed
Disable request-pty when using exec()
disableQuietMode()  : mixed
Disable Quiet Mode
disconnect()  : mixed
Disconnect
enablePTY()  : mixed
Enable request-pty when using exec()
enableQuietMode()  : mixed
Enable Quiet Mode
exec()  : string
Execute Command
getAlgorithmsNegotiated()  : array<string|int, mixed>
Return list of negotiated algorithms
getBannerMessage()  : string
Returns the banner message.
getCompressionAlgorithmsClient2Server()  : array<string|int, mixed>
Return a list of the compression algorithms the server supports, when receiving stuff from the client.
getCompressionAlgorithmsServer2Client()  : array<string|int, mixed>
Return a list of the compression algorithms the server supports, when sending stuff to the client.
getEncryptionAlgorithmsClient2Server()  : array<string|int, mixed>
Return a list of the (symmetric key) encryption algorithms the server supports, when receiving stuff from the client.
getEncryptionAlgorithmsServer2Client()  : array<string|int, mixed>
Return a list of the (symmetric key) encryption algorithms the server supports, when sending stuff to the client.
getErrors()  : array<string|int, string>
Returns all errors
getExitStatus()  : false|int
Returns the exit status of an SSH command or false.
getKexAlgorithms()  : array<string|int, mixed>
Return a list of the key exchange algorithms the server supports.
getLanguagesClient2Server()  : array<string|int, mixed>
Return a list of the languages the server supports, when receiving stuff from the client.
getLanguagesServer2Client()  : array<string|int, mixed>
Return a list of the languages the server supports, when sending stuff to the client.
getLastError()  : string
Returns the last error
getLog()  : array<string|int, mixed>|false|string
Returns a log of the packets that have been sent and received.
getMACAlgorithmsClient2Server()  : array<string|int, mixed>
Return a list of the MAC algorithms the server supports, when receiving stuff from the client.
getMACAlgorithmsServer2Client()  : array<string|int, mixed>
Return a list of the MAC algorithms the server supports, when sending stuff to the client.
getServerAlgorithms()  : array<string|int, mixed>
Returns a list of algorithms the server supports
getServerHostKeyAlgorithms()  : array<string|int, mixed>
Return a list of the host key (public key) algorithms the server supports.
getServerIdentification()  : string
Return the server identification.
getServerPublicHostKey()  : mixed
Returns the server public host key.
getStdError()  : mixed
Get the output from stdError
getSupportedCompressionAlgorithms()  : array<string|int, mixed>
Returns a list of compression algorithms that phpseclib supports
getSupportedEncryptionAlgorithms()  : array<string|int, mixed>
Returns a list of symmetric key algorithms that phpseclib supports
getSupportedHostKeyAlgorithms()  : array<string|int, mixed>
Returns a list of host key algorithms that phpseclib supports
getSupportedKEXAlgorithms()  : array<string|int, mixed>
Returns a list of KEX algorithms that phpseclib supports
getSupportedMACAlgorithms()  : array<string|int, mixed>
Returns a list of MAC algorithms that phpseclib supports
getWindowColumns()  : int
Returns the number of columns for the terminal window size.
getWindowRows()  : int
Returns the number of rows for the terminal window size.
isAuthenticated()  : bool
Have you successfully been logged in?
isConnected()  : bool
Is the connection still active?
isPTYEnabled()  : bool
Returns whether request-pty is enabled or not
isQuietModeEnabled()  : bool
Returns whether Quiet Mode is enabled or not
isTimeout()  : mixed
Is timeout?
login()  : bool
Login
ping()  : bool
Pings a server connection, or tries to reconnect if the connection has gone down
read()  : string|bool
Returns the output of an interactive shell
reset()  : mixed
Closes a channel
sendIdentificationStringFirst()  : mixed
Send Identification String First
sendIdentificationStringLast()  : mixed
Send Identification String Last
sendKEXINITFirst()  : mixed
Send SSH_MSG_KEXINIT First
sendKEXINITLast()  : mixed
Send SSH_MSG_KEXINIT Last
setCryptoEngine()  : mixed
Set Crypto Engine Mode
setPreferredAlgorithms()  : mixed
Accepts an associative array with up to four parameters as described at <https://www.php.net/manual/en/function.ssh2-connect.php>
setTimeout()  : mixed
Set Timeout
setWindowColumns()  : mixed
Sets the number of columns for the terminal window size.
setWindowRows()  : mixed
Sets the number of rows for the terminal window size.
setWindowSize()  : mixed
Sets the number of columns and rows for the terminal window size.
startSubsystem()  : bool
Start a subsystem.
stopSubsystem()  : bool
Stops a subsystem.
write()  : bool
Inputs a command into an interactive shell.

Constants

CHANNEL_AGENT_FORWARD

public mixed CHANNEL_AGENT_FORWARD = 4

CHANNEL_EXEC

public mixed CHANNEL_EXEC = 1

CHANNEL_KEEP_ALIVE

public mixed CHANNEL_KEEP_ALIVE = 5

CHANNEL_SHELL

public mixed CHANNEL_SHELL = 2

CHANNEL_SUBSYSTEM

public mixed CHANNEL_SUBSYSTEM = 3

LOG_COMPLEX

Returns the message content

public mixed LOG_COMPLEX = 2

LOG_MAX_SIZE

Make sure that the log never gets larger than this

public mixed LOG_MAX_SIZE = 1048576

LOG_REALTIME

Outputs the content real-time

public mixed LOG_REALTIME = 3

LOG_REALTIME_FILE

Dumps the content real-time to a file

public mixed LOG_REALTIME_FILE = 4

LOG_SIMPLE

Returns the message numbers

public mixed LOG_SIMPLE = 1

MASK_CONNECTED

public mixed MASK_CONNECTED = 0x2

MASK_CONSTRUCTOR

public mixed MASK_CONSTRUCTOR = 0x1

MASK_LOGIN

public mixed MASK_LOGIN = 0x8

MASK_LOGIN_REQ

public mixed MASK_LOGIN_REQ = 0x4

MASK_SHELL

public mixed MASK_SHELL = 0x10

MASK_WINDOW_ADJUST

public mixed MASK_WINDOW_ADJUST = 0x20

READ_NEXT

Returns whenever a data packet is received.

public mixed READ_NEXT = 3

Some data packets may only contain a single character so it may be necessary to call read() multiple times when using this option

READ_REGEX

Returns when a string matching the regular expression $expect is found

public mixed READ_REGEX = 2

READ_SIMPLE

Returns when a string matching $expect exactly is found

public mixed READ_SIMPLE = 1

Properties

$agent

A System_SSH_Agent for use in the SSH2 Agent Forwarding scenario

public System_SSH_Agent $agent
Tags
access

private

$auth

Authentication Credentials

public array<string|int, mixed> $auth = array()
Tags
access

private

$bad_key_size_fix

Some versions of OpenSSH incorrectly calculate the key size

public bool $bad_key_size_fix = false
Tags
access

private

$banner_message

Banner Message

public string $banner_message = ''

Quoting from the RFC, "in some jurisdictions, sending a warning message before authentication may be relevant for getting legal protection."

Tags
see
self::_filter()
see
self::getBannerMessage()
access

private

$binary_packet_buffer

Binary Packet Buffer

public string|false $binary_packet_buffer = false
Tags
access

private

$bitmap

Execution Bitmap

public int $bitmap = 0

The bits that are set represent functions that have been called already. This is used to determine if a requisite function has been successfully executed. If not, an error should be thrown.

Tags
access

private

$channel_buffers

Channel Buffers

public array<string|int, mixed> $channel_buffers = array()

If a client requests a packet from one channel but receives two packets from another those packets should be placed in a buffer

Tags
see
self::_get_channel_packet()
see
self::exec()
access

private

$channel_open_failure_reasons

SSH_MSG_CHANNEL_OPEN_FAILURE 'reason codes', defined in RFC4254

public array<string|int, mixed> $channel_open_failure_reasons = array()
Tags
see
self::__construct()
access

private

$channel_status

Channel Status

public array<string|int, mixed> $channel_status = array()

Contains the type of the last sent message

Tags
see
self::_get_channel_packet()
access

private

$compression_algorithms_client_to_server

Compression Algorithms: Client to Server

public array<string|int, mixed>|false $compression_algorithms_client_to_server = false
Tags
see
self::getCompressionAlgorithmsClient2Server()
access

private

$compression_algorithms_server_to_client

Compression Algorithms: Server to Client

public array<string|int, mixed>|false $compression_algorithms_server_to_client = false
Tags
see
self::getCompressionAlgorithmsServer2Client()
access

private

$crypto_engine

Crypto Engine

public int $crypto_engine = false
Tags
see
self::setCryptoEngine()
see
self::_key_exchange()
access

private

$curTimeout

Current Timeout

public mixed $curTimeout
Tags
see
self::_get_channel_packet()
access

private

$decrypt

Server to Client Encryption Object

public object $decrypt = false
Tags
see
self::_get_binary_packet()
access

private

$decrypt_block_size

Block Size for Client to Server Encryption

public int $decrypt_block_size = 8
Tags
see
self::__construct()
see
self::_get_binary_packet()
access

private

$disconnect_reasons

Disconnection Message 'reason codes' defined in RFC4253

public array<string|int, mixed> $disconnect_reasons = array()
Tags
see
self::__construct()
access

private

$encrypt

Client to Server Encryption Object

public object $encrypt = false
Tags
see
self::_send_binary_packet()
access

private

$encrypt_block_size

Block Size for Server to Client Encryption

public int $encrypt_block_size = 8

"Note that the length of the concatenation of 'packet_length', 'padding_length', 'payload', and 'random padding' MUST be a multiple of the cipher block size or 8, whichever is larger. This constraint MUST be enforced, even when using stream ciphers."

-- http://tools.ietf.org/html/rfc4253#section-6

Tags
see
self::__construct()
see
self::_send_binary_packet()
access

private

$encryption_algorithms_client_to_server

Encryption Algorithms: Client to Server

public array<string|int, mixed>|false $encryption_algorithms_client_to_server = false
Tags
see
self::getEncryptionAlgorithmsClient2Server()
access

private

$encryption_algorithms_server_to_client

Encryption Algorithms: Server to Client

public array<string|int, mixed>|false $encryption_algorithms_server_to_client = false
Tags
see
self::getEncryptionAlgorithmsServer2Client()
access

private

$errors

Error information

public string $errors = array()
Tags
see
self::getErrors()
see
self::getLastError()
access

private

$exchange_hash

Exchange hash

public string $exchange_hash = false

The current exchange hash

Tags
see
self::_key_exchange()
access

private

$exit_status

Exit status returned from ssh if any

public int $exit_status
Tags
access

private

$fsock

The Socket Object

public object $fsock
Tags
access

private

$get_seq_no

Get Sequence Number

public int $get_seq_no = 0

See 'Section 6.4. Data Integrity' of rfc4253 for more info.

Tags
see
self::_get_binary_packet()
access

private

$hmac_check

Server to Client HMAC Object

public object $hmac_check = false
Tags
see
self::_get_binary_packet()
access

private

$hmac_create

Client to Server HMAC Object

public object $hmac_create = false
Tags
see
self::_send_binary_packet()
access

private

$hmac_size

Size of server to client HMAC

public int $hmac_size = false

We need to know how big the HMAC will be for the server to client direction so that we know how many bytes to read. For the client to server side, the HMAC object will make the HMAC as long as it needs to be. All we need to do is append it.

Tags
see
self::_get_binary_packet()
access

private

$host

Hostname

public string $host
Tags
see
self::__construct()
see
self::_connect()
access

private

$identifier

The SSH identifier

public string $identifier
Tags
access

private

$in_request_pty_exec

Flag set while exec() is running when using enablePTY()

public bool $in_request_pty_exec = false
Tags
access

private

$in_subsystem

Flag set after startSubsystem() is called

public bool $in_subsystem
Tags
access

private

$interactiveBuffer

Interactive Buffer

public array<string|int, mixed> $interactiveBuffer = ''
Tags
see
self::read()
access

private

$is_timeout

Did read() timeout or return normally?

public bool $is_timeout = false
Tags
see
self::isTimeout()
access

private

$kex_algorithm

Key Exchange Algorithm

public string|false $kex_algorithm = false
Tags
see
self::getMethodsNegotiated()
access

private

$kex_algorithms

Key Exchange Algorithms

public array<string|int, mixed>|false $kex_algorithms = false
Tags
see
self::getKexAlgorithims()
access

private

$kex_dh_group_size_max

Maximum Diffie-Hellman Group Bit Size in RFC 4419 Key Exchange Methods

public int $kex_dh_group_size_max = 4096
Tags
see
self::_key_exchange()
access

private

$kex_dh_group_size_min

Minimum Diffie-Hellman Group Bit Size in RFC 4419 Key Exchange Methods

public int $kex_dh_group_size_min = 1536
Tags
see
self::_key_exchange()
access

private

$kex_dh_group_size_preferred

Preferred Diffie-Hellman Group Bit Size in RFC 4419 Key Exchange Methods

public int $kex_dh_group_size_preferred = 2048
Tags
see
self::_key_exchange()
access

private

$keyboard_requests_responses

Keyboard Interactive Request / Responses

public array<string|int, mixed> $keyboard_requests_responses = array()
Tags
see
self::_keyboard_interactive_process()
access

private

$languages_client_to_server

Languages: Client to Server

public array<string|int, mixed>|false $languages_client_to_server = false
Tags
see
self::getLanguagesClient2Server()
access

private

$languages_server_to_client

Languages: Server to Client

public array<string|int, mixed>|false $languages_server_to_client = false
Tags
see
self::getLanguagesServer2Client()
access

private

$last_interactive_response

The Last Interactive Response

public string $last_interactive_response = ''
Tags
see
self::_keyboard_interactive_process()
access

private

$last_packet

Time of first network activity

public int $last_packet
Tags
access

private

$log_boundary

Log Boundary

public string $log_boundary = ':'
Tags
see
self::_format_log()
access

private

$log_long_width

Log Long Width

public int $log_long_width = 65
Tags
see
self::_format_log()
access

private

$log_short_width

Log Short Width

public int $log_short_width = 16
Tags
see
self::_format_log()
access

private

$log_size

Current log size

public int $log_size

Should never exceed self::LOG_MAX_SIZE

Tags
see
self::_send_binary_packet()
see
self::_get_binary_packet()
access

private

$mac_algorithms_client_to_server

MAC Algorithms: Client to Server

public array<string|int, mixed>|false $mac_algorithms_client_to_server = false
Tags
see
self::getMACAlgorithmsClient2Server()
access

private

$mac_algorithms_server_to_client

MAC Algorithms: Server to Client

public array<string|int, mixed>|false $mac_algorithms_server_to_client = false
Tags
see
self::getMACAlgorithmsServer2Client()
access

private

$message_log

Message Log

public array<string|int, mixed> $message_log = array()
Tags
see
self::getLog()
access

private

$message_number_log

Message Number Log

public array<string|int, mixed> $message_number_log = array()
Tags
see
self::getLog()
access

private

$message_numbers

Message Numbers

public array<string|int, mixed> $message_numbers = array()
Tags
see
self::__construct()
access

private

$packet_size_client_to_server

Packet Size

public array<string|int, mixed> $packet_size_client_to_server = array()

Maximum packet size indexed by channel

Tags
see
self::_send_channel_packet()
access

private

$port

Port Number

public int $port
Tags
see
self::__construct()
see
self::_connect()
access

private

$preferred

Preferred Algorithms

public array<string|int, mixed> $preferred = array()
Tags
see
self::setPreferredAlgorithms()
access

private

$preferred_signature_format

Preferred Signature Format

public string|false $preferred_signature_format = false
Tags
access

private

$quiet_mode

Flag to suppress stderr from output

public mixed $quiet_mode = false
Tags
see
self::enableQuietMode()
access

private

$realtime_log_file

Real-time log file pointer

public resource $realtime_log_file
Tags
see
self::_append_log()
access

private

$realtime_log_size

Real-time log file size

public int $realtime_log_size
Tags
see
self::_append_log()
access

private

$realtime_log_wrap

Real-time log file wrap boolean

public mixed $realtime_log_wrap
Tags
see
self::_append_log()
access

private

$request_pty

Flag to request a PTY when using exec()

public bool $request_pty = false
Tags
see
self::enablePTY()
access

private

$retry_connect

Should we try to re-connect to re-establish keys?

public bool $retry_connect = false
Tags
access

private

$send_id_string_first

Send the identification string first?

public bool $send_id_string_first = true
Tags
access

private

$send_kex_first

Send the key exchange initiation packet first?

public bool $send_kex_first = true
Tags
access

private

$send_seq_no

Send Sequence Number

public int $send_seq_no = 0

See 'Section 6.4. Data Integrity' of rfc4253 for more info.

Tags
see
self::_send_binary_packet()
access

private

$server_channels

Server Channels

public array<string|int, mixed> $server_channels = array()

Maps client channels to server channels

Tags
see
self::_get_channel_packet()
see
self::exec()
access

private

$server_host_key_algorithms

Server Host Key Algorithms

public array<string|int, mixed>|false $server_host_key_algorithms = false
Tags
see
self::getServerHostKeyAlgorithms()
access

private

$server_identifier

Server Identifier

public array<string|int, mixed>|false $server_identifier = false
Tags
see
self::getServerIdentification()
access

private

$server_public_host_key

Server Public Host Key

public string $server_public_host_key
Tags
see
self::getServerPublicHostKey()
access

private

$session_id

Session identifier

public string $session_id = false

"The exchange hash H from the first key exchange is additionally used as the session identifier, which is a unique identifier for this connection."

-- http://tools.ietf.org/html/rfc4253#section-7.2

Tags
see
self::_key_exchange()
access

private

$signature

Server signature

public string $signature = ''

Verified against $this->session_id

Tags
see
self::getServerPublicHostKey()
access

private

$signature_format

Server signature format

public string $signature_format = ''

ssh-rsa or ssh-dss.

Tags
see
self::getServerPublicHostKey()
access

private

$signature_validated

Has the signature been validated?

public bool $signature_validated = false
Tags
see
self::getServerPublicHostKey()
access

private

$stdErrorLog

Contents of stdError

public string $stdErrorLog
Tags
access

private

$timeout

Timeout

public mixed $timeout
Tags
see
self::setTimeout()
access

private

$window_resize

What we resize the window to

public int $window_resize = 0x40000000

When PuTTY resizes the window it doesn't add an additional 0x7FFFFFFF bytes - it adds 0x40000000 bytes. Some SFTP clients (GoAnywhere) don't support adding 0x7FFFFFFF to the window size after the fact so we'll just do what PuTTY does

Tags
see
self::_send_channel_packet()
see
self::exec()
access

private

$window_size

The Window Size

public int $window_size = 0x7fffffff

Bytes the other party can send before it must wait for the window to be adjusted (0x7FFFFFFF = 2GB)

Tags
see
self::_send_channel_packet()
see
self::exec()
access

private

$window_size_client_to_server

Window size, client to server

public array<string|int, mixed> $window_size_client_to_server = array()

Window size indexed by channel

Tags
see
self::_get_channel_packet()
access

private

$window_size_server_to_client

Window size, server to client

public array<string|int, mixed> $window_size_server_to_client = array()

Window size indexed by channel

Tags
see
self::_send_channel_packet()
access

private

$windowColumns

Number of columns for terminal window size

public int $windowColumns = 80
Tags
see
self::getWindowColumns()
see
self::setWindowColumns()
see
self::setWindowSize()
access

private

$windowRows

Number of columns for terminal window size

public int $windowRows = 24
Tags
see
self::getWindowRows()
see
self::setWindowRows()
see
self::setWindowSize()
access

private

Methods

__construct()

Default Constructor.

public __construct(mixed $host[, int $port = 22 ][, int $timeout = 10 ]) : SSH2

$host can either be a string, representing the host, or a stream resource.

Parameters
$host : mixed
$port : int = 22
$timeout : int = 10
Tags
see
self::login()
access

public

Return values
SSH2

__destruct()

Destructor.

public __destruct() : mixed

Will be called, automatically, if you're supporting just PHP5. If you're supporting PHP4, you'll need to call disconnect().

Tags
access

public

Return values
mixed

_append_log()

Logs data packets

public _append_log(mixed $message_number, mixed $message) : mixed

Makes sure that only the last 1MB worth of packets will be logged

Parameters
$message_number : mixed
$message : mixed
Tags
access

private

Return values
mixed

_array_intersect_first()

Returns the first value of the intersection of two arrays or false if the intersection is empty. The order is defined by the first parameter.

public _array_intersect_first(array<string|int, mixed> $array1, array<string|int, mixed> $array2) : mixed
Parameters
$array1 : array<string|int, mixed>
$array2 : array<string|int, mixed>
Tags
access

private

Return values
mixed

False if intersection is empty, else intersected value.

_close_channel()

Closes and flushes a channel

public _close_channel(int $client_channel[, bool $want_reply = false ]) : bool

\phpseclib\Net\SSH2 doesn't properly close most channels. For exec() channels are normally closed by the server and for SFTP channels are presumably closed when the client disconnects. This functions is intended for SCP more than anything.

Parameters
$client_channel : int
$want_reply : bool = false
Tags
access

private

Return values
bool

_connect()

Connect to an SSHv2 server

public _connect() : bool
Tags
access

private

Return values
bool

_define_array()

Define Array

public _define_array() : mixed

Takes any number of arrays whose indices are integers and whose values are strings and defines a bunch of named constants from it, using the value as the name of the constant and the index as the value of the constant. If any of the constants that would be defined already exists, none of the constants will be defined.

Tags
access

private

Return values
mixed

_disconnect()

Disconnect

public _disconnect(int $reason) : bool
Parameters
$reason : int
Tags
access

private

Return values
bool

_encryption_algorithm_to_crypt_instance()

Maps an encryption algorithm name to an instance of a subclass of \phpseclib\Crypt\Base.

public _encryption_algorithm_to_crypt_instance(string $algorithm) : mixed
Parameters
$algorithm : string

Name of the encryption algorithm

Tags
access

private

Return values
mixed

Instance of \phpseclib\Crypt\Base or null for unknown

_encryption_algorithm_to_key_size()

Maps an encryption algorithm name to the number of key bytes.

public _encryption_algorithm_to_key_size(string $algorithm) : int|null
Parameters
$algorithm : string

Name of the encryption algorithm

Tags
access

private

Return values
int|null

Number of bytes as an integer or null for unknown

_filter()

Filter Binary Packets

public _filter(mixed $payload, mixed $skip_channel_filter) : string

Because some binary packets need to be ignored...

Parameters
$payload : mixed
$skip_channel_filter : mixed
Tags
see
self::_get_binary_packet()
access

private

Return values
string

_format_log()

Formats a log for printing

public _format_log(array<string|int, mixed> $message_log, array<string|int, mixed> $message_number_log) : string
Parameters
$message_log : array<string|int, mixed>
$message_number_log : array<string|int, mixed>
Tags
access

private

Return values
string

_format_log_helper()

Helper function for _format_log

public _format_log_helper(array<string|int, mixed> $matches) : string

For use with preg_replace_callback()

Parameters
$matches : array<string|int, mixed>
Tags
access

private

Return values
string

_generate_identifier()

Generates the SSH identifier

public _generate_identifier() : string

You should overwrite this method in your own class if you want to use another identifier

Tags
access

protected

Return values
string

_get_binary_packet()

Gets Binary Packets

public _get_binary_packet([mixed $skip_channel_filter = false ]) : string

See '6. Binary Packet Protocol' of rfc4253 for more info.

Parameters
$skip_channel_filter : mixed = false
Tags
see
self::_send_binary_packet()
access

private

Return values
string

_get_channel_packet()

Gets channel data

public _get_channel_packet( $client_channel[, mixed $skip_extended = false ]) : mixed

Returns the data as a string if it's available and false if not.

Parameters
$client_channel :
$skip_extended : mixed = false
Tags
access

private

Return values
mixed

_get_interactive_channel()

Return the channel to be used with read() / write()

public _get_interactive_channel() : int
Tags
see
self::read()
see
self::write()
access

public

Return values
int

_get_open_channel()

Return an available open channel

public _get_open_channel() : int
Tags
access

public

Return values
int

_initShell()

Creates an interactive shell

public _initShell() : bool
Tags
see
self::read()
see
self::write()
access

private

Return values
bool

_key_exchange()

Key Exchange

public _key_exchange([string $kexinit_payload_server = false ]) : mixed
Parameters
$kexinit_payload_server : string = false

optional

Tags
access

private

Return values
mixed

_keyboard_interactive_login()

Login via keyboard-interactive authentication

public _keyboard_interactive_login(string $username, string $password) : bool

See RFC4256 for details. This is not a full-featured keyboard-interactive authenticator.

Parameters
$username : string
$password : string
Tags
access

private

Return values
bool

_keyboard_interactive_process()

Handle the keyboard-interactive requests / responses.

public _keyboard_interactive_process() : bool
Tags
access

private

Return values
bool

_login()

Login Helper

public _login(string $username) : bool
Parameters
$username : string
Tags
see
self::_login_helper()
access

private

Return values
bool

_on_channel_open()

Helper function for agent->_on_channel_open()

public _on_channel_open() : mixed

Used when channels are created to inform agent of said channel opening. Must be called after channel open confirmation received

Tags
access

private

Return values
mixed

_reconnect()

In situ reconnect method

public _reconnect() : bool
Tags
access

private

Return values
bool

_reset_connection()

Resets a connection for re-use

public _reset_connection(int $reason) : mixed
Parameters
$reason : int
Tags
access

private

Return values
mixed

_send_binary_packet()

Sends Binary Packets

public _send_binary_packet(string $data[, string $logged = null ]) : bool

See '6. Binary Packet Protocol' of rfc4253 for more info.

Parameters
$data : string
$logged : string = null
Tags
see
self::_get_binary_packet()
access

private

Return values
bool

_send_channel_packet()

Sends channel data

public _send_channel_packet(int $client_channel, string $data) : bool

Spans multiple SSH_MSG_CHANNEL_DATAs if appropriate

Parameters
$client_channel : int
$data : string
Tags
access

private

Return values
bool

_ssh_agent_login()

Login with an ssh-agent provided key

public _ssh_agent_login(string $username, Agent $agent) : bool
Parameters
$username : string
$agent : Agent
Tags
access

private

Return values
bool

_string_shift()

String Shift

public _string_shift(string &$string[, int $index = 1 ]) : string

Inspired by array_shift

Parameters
$string : string
$index : int = 1
Tags
access

private

Return values
string

_updateLogHistory()

Update packet types in log history

public _updateLogHistory(string $old, string $new) : mixed
Parameters
$old : string
$new : string
Tags
access

private

Return values
mixed

disablePTY()

Disable request-pty when using exec()

public disablePTY() : mixed
Tags
access

public

Return values
mixed

disableQuietMode()

Disable Quiet Mode

public disableQuietMode() : mixed

Show stderr in output

Tags
access

public

Return values
mixed

disconnect()

Disconnect

public disconnect() : mixed
Tags
access

public

Return values
mixed

enablePTY()

Enable request-pty when using exec()

public enablePTY() : mixed
Tags
access

public

Return values
mixed

enableQuietMode()

Enable Quiet Mode

public enableQuietMode() : mixed

Suppress stderr from output

Tags
access

public

Return values
mixed

exec()

Execute Command

public exec(string $command[, callable $callback = null ]) : string

If $callback is set to false then \phpseclib\Net\SSH2::_get_channel_packet(self::CHANNEL_EXEC) will need to be called manually. In all likelihood, this is not a feature you want to be taking advantage of.

Parameters
$command : string
$callback : callable = null
Tags
access

public

Return values
string

getAlgorithmsNegotiated()

Return list of negotiated algorithms

public getAlgorithmsNegotiated() : array<string|int, mixed>

Uses the same format as https://www.php.net/ssh2-methods-negotiated

Tags
access

public

Return values
array<string|int, mixed>

getBannerMessage()

Returns the banner message.

public getBannerMessage() : string

Quoting from the RFC, "in some jurisdictions, sending a warning message before authentication may be relevant for getting legal protection."

Tags
access

public

Return values
string

getCompressionAlgorithmsClient2Server()

Return a list of the compression algorithms the server supports, when receiving stuff from the client.

public getCompressionAlgorithmsClient2Server() : array<string|int, mixed>
Tags
access

public

Return values
array<string|int, mixed>

getCompressionAlgorithmsServer2Client()

Return a list of the compression algorithms the server supports, when sending stuff to the client.

public getCompressionAlgorithmsServer2Client() : array<string|int, mixed>
Tags
access

public

Return values
array<string|int, mixed>

getEncryptionAlgorithmsClient2Server()

Return a list of the (symmetric key) encryption algorithms the server supports, when receiving stuff from the client.

public getEncryptionAlgorithmsClient2Server() : array<string|int, mixed>
Tags
access

public

Return values
array<string|int, mixed>

getEncryptionAlgorithmsServer2Client()

Return a list of the (symmetric key) encryption algorithms the server supports, when sending stuff to the client.

public getEncryptionAlgorithmsServer2Client() : array<string|int, mixed>
Tags
access

public

Return values
array<string|int, mixed>

getErrors()

Returns all errors

public getErrors() : array<string|int, string>
Tags
access

public

Return values
array<string|int, string>

getExitStatus()

Returns the exit status of an SSH command or false.

public getExitStatus() : false|int
Tags
access

public

Return values
false|int

getKexAlgorithms()

Return a list of the key exchange algorithms the server supports.

public getKexAlgorithms() : array<string|int, mixed>
Tags
access

public

Return values
array<string|int, mixed>

getLanguagesClient2Server()

Return a list of the languages the server supports, when receiving stuff from the client.

public getLanguagesClient2Server() : array<string|int, mixed>
Tags
access

public

Return values
array<string|int, mixed>

getLanguagesServer2Client()

Return a list of the languages the server supports, when sending stuff to the client.

public getLanguagesServer2Client() : array<string|int, mixed>
Tags
access

public

Return values
array<string|int, mixed>

getLastError()

Returns the last error

public getLastError() : string
Tags
access

public

Return values
string

getLog()

Returns a log of the packets that have been sent and received.

public getLog() : array<string|int, mixed>|false|string

Returns a string if NET_SSH2_LOGGING == self::LOG_COMPLEX, an array if NET_SSH2_LOGGING == self::LOG_SIMPLE and false if !defined('NET_SSH2_LOGGING')

Tags
access

public

Return values
array<string|int, mixed>|false|string

getMACAlgorithmsClient2Server()

Return a list of the MAC algorithms the server supports, when receiving stuff from the client.

public getMACAlgorithmsClient2Server() : array<string|int, mixed>
Tags
access

public

Return values
array<string|int, mixed>

getMACAlgorithmsServer2Client()

Return a list of the MAC algorithms the server supports, when sending stuff to the client.

public getMACAlgorithmsServer2Client() : array<string|int, mixed>
Tags
access

public

Return values
array<string|int, mixed>

getServerAlgorithms()

Returns a list of algorithms the server supports

public getServerAlgorithms() : array<string|int, mixed>
Tags
access

public

Return values
array<string|int, mixed>

getServerHostKeyAlgorithms()

Return a list of the host key (public key) algorithms the server supports.

public getServerHostKeyAlgorithms() : array<string|int, mixed>
Tags
access

public

Return values
array<string|int, mixed>

getServerIdentification()

Return the server identification.

public getServerIdentification() : string
Tags
access

public

Return values
string

getServerPublicHostKey()

Returns the server public host key.

public getServerPublicHostKey() : mixed

Caching this the first time you connect to a server and checking the result on subsequent connections is recommended. Returns false if the server signature is not signed correctly with the public host key.

Tags
access

public

Return values
mixed

getStdError()

Get the output from stdError

public getStdError() : mixed
Tags
access

public

Return values
mixed

getSupportedCompressionAlgorithms()

Returns a list of compression algorithms that phpseclib supports

public getSupportedCompressionAlgorithms() : array<string|int, mixed>
Tags
access

public

Return values
array<string|int, mixed>

getSupportedEncryptionAlgorithms()

Returns a list of symmetric key algorithms that phpseclib supports

public getSupportedEncryptionAlgorithms() : array<string|int, mixed>
Tags
access

public

Return values
array<string|int, mixed>

getSupportedHostKeyAlgorithms()

Returns a list of host key algorithms that phpseclib supports

public getSupportedHostKeyAlgorithms() : array<string|int, mixed>
Tags
access

public

Return values
array<string|int, mixed>

getSupportedKEXAlgorithms()

Returns a list of KEX algorithms that phpseclib supports

public getSupportedKEXAlgorithms() : array<string|int, mixed>
Tags
access

public

Return values
array<string|int, mixed>

getSupportedMACAlgorithms()

Returns a list of MAC algorithms that phpseclib supports

public getSupportedMACAlgorithms() : array<string|int, mixed>
Tags
access

public

Return values
array<string|int, mixed>

getWindowColumns()

Returns the number of columns for the terminal window size.

public getWindowColumns() : int
Tags
access

public

Return values
int

getWindowRows()

Returns the number of rows for the terminal window size.

public getWindowRows() : int
Tags
access

public

Return values
int

isAuthenticated()

Have you successfully been logged in?

public isAuthenticated() : bool
Tags
access

public

Return values
bool

isConnected()

Is the connection still active?

public isConnected() : bool
Tags
access

public

Return values
bool

isPTYEnabled()

Returns whether request-pty is enabled or not

public isPTYEnabled() : bool
Tags
see
self::enablePTY()
see
self::disablePTY()
access

public

Return values
bool

isQuietModeEnabled()

Returns whether Quiet Mode is enabled or not

public isQuietModeEnabled() : bool
Tags
see
self::enableQuietMode()
see
self::disableQuietMode()
access

public

Return values
bool

isTimeout()

Is timeout?

public isTimeout() : mixed

Did exec() or read() return because they timed out or because they encountered the end?

Tags
access

public

Return values
mixed

login()

Login

public login(string $username) : bool

The $password parameter can be a plaintext password, a \phpseclib\Crypt\RSA object or an array

Parameters
$username : string
Tags
see
self::_login()
access

public

Return values
bool

ping()

Pings a server connection, or tries to reconnect if the connection has gone down

public ping() : bool

Inspired by http://php.net/manual/en/mysqli.ping.php

Tags
access

public

Return values
bool

read()

Returns the output of an interactive shell

public read([string $expect = '' ][, int $mode = self::READ_SIMPLE ]) : string|bool

Returns when there's a match for $expect, which can take the form of a string literal or, if $mode == self::READ_REGEX, a regular expression.

Parameters
$expect : string = ''
$mode : int = self::READ_SIMPLE
Tags
see
self::write()
access

public

Return values
string|bool

reset()

Closes a channel

public reset() : mixed

If read() timed out you might want to just close the channel and have it auto-restart on the next read() call

Tags
access

public

Return values
mixed

sendIdentificationStringFirst()

Send Identification String First

public sendIdentificationStringFirst() : mixed

https://tools.ietf.org/html/rfc4253#section-4.2 says "when the connection has been established, both sides MUST send an identification string". It does not say which side sends it first. In theory it shouldn't matter but it is a fact of life that some SSH servers are simply buggy

Tags
access

public

Return values
mixed

sendIdentificationStringLast()

Send Identification String Last

public sendIdentificationStringLast() : mixed

https://tools.ietf.org/html/rfc4253#section-4.2 says "when the connection has been established, both sides MUST send an identification string". It does not say which side sends it first. In theory it shouldn't matter but it is a fact of life that some SSH servers are simply buggy

Tags
access

public

Return values
mixed

sendKEXINITFirst()

Send SSH_MSG_KEXINIT First

public sendKEXINITFirst() : mixed

https://tools.ietf.org/html/rfc4253#section-7.1 says "key exchange begins by each sending sending the [SSH_MSG_KEXINIT] packet". It does not say which side sends it first. In theory it shouldn't matter but it is a fact of life that some SSH servers are simply buggy

Tags
access

public

Return values
mixed

sendKEXINITLast()

Send SSH_MSG_KEXINIT Last

public sendKEXINITLast() : mixed

https://tools.ietf.org/html/rfc4253#section-7.1 says "key exchange begins by each sending sending the [SSH_MSG_KEXINIT] packet". It does not say which side sends it first. In theory it shouldn't matter but it is a fact of life that some SSH servers are simply buggy

Tags
access

public

Return values
mixed

setCryptoEngine()

Set Crypto Engine Mode

public setCryptoEngine(int $engine) : mixed

Possible $engine values: CRYPT_MODE_INTERNAL, CRYPT_MODE_MCRYPT

Parameters
$engine : int
Tags
access

public

Return values
mixed

setPreferredAlgorithms()

Accepts an associative array with up to four parameters as described at <https://www.php.net/manual/en/function.ssh2-connect.php>

public setPreferredAlgorithms(array<string|int, mixed> $methods) : mixed
Parameters
$methods : array<string|int, mixed>
Tags
access

public

Return values
mixed

setTimeout()

Set Timeout

public setTimeout(mixed $timeout) : mixed

$ssh->exec('ping 127.0.0.1'); on a Linux host will never return and will run indefinitely. setTimeout() makes it so it'll timeout. Setting $timeout to false or 0 will mean there is no timeout.

Parameters
$timeout : mixed
Tags
access

public

Return values
mixed

setWindowColumns()

Sets the number of columns for the terminal window size.

public setWindowColumns(int $value) : mixed
Parameters
$value : int
Tags
access

public

Return values
mixed

setWindowRows()

Sets the number of rows for the terminal window size.

public setWindowRows(int $value) : mixed
Parameters
$value : int
Tags
access

public

Return values
mixed

setWindowSize()

Sets the number of columns and rows for the terminal window size.

public setWindowSize([int $columns = 80 ][, int $rows = 24 ]) : mixed
Parameters
$columns : int = 80
$rows : int = 24
Tags
access

public

Return values
mixed

startSubsystem()

Start a subsystem.

public startSubsystem(string $subsystem) : bool

Right now only one subsystem at a time is supported. To support multiple subsystem's stopSubsystem() could accept a string that contained the name of the subsystem, but at that point, only one subsystem of each type could be opened. To support multiple subsystem's of the same name maybe it'd be best if startSubsystem() generated a new channel id and returns that and then that that was passed into stopSubsystem() but that'll be saved for a future date and implemented if there's sufficient demand for such a feature.

Parameters
$subsystem : string
Tags
see
self::stopSubsystem()
access

public

Return values
bool

stopSubsystem()

Stops a subsystem.

public stopSubsystem() : bool
Tags
see
self::startSubsystem()
access

public

Return values
bool

write()

Inputs a command into an interactive shell.

public write(string $cmd) : bool
Parameters
$cmd : string
Tags
see
self::read()
access

public

Return values
bool

Search results