PHP Extension
PHP Extension
Set an Environment Variable on an SSH Channel
See more SSH Examples
Demonstrates the Chilkat Ssh.SendReqSetEnv method, which asks the server to set an environment variable for a session channel. The arguments are the channel number, the variable name, and its value. Send these requests before the exec, shell, or subsystem request.
Background: This is the clean way to pass configuration to a remote command without embedding it in the command line. Be aware that many SSH servers restrict which variables clients may set (OpenSSH's
AcceptEnv), so a request can be silently ignored or rejected — do not rely on it without verifying the server's policy.Chilkat PHP Extension Downloads
<?php
include("chilkat.php");
$success = false;
// Demonstrates the Ssh.SendReqSetEnv method, which asks the server to set an environment
// variable for a session channel. The 1st argument is the channel number, the 2nd is the
// variable name, and the 3rd is its value. Send it before the exec, shell, or subsystem
// request.
$ssh = new CkSsh();
$sshPort = 22;
$success = $ssh->Connect('ssh.example.com',$sshPort);
if ($success == false) {
print $ssh->lastErrorText() . "\n";
exit;
}
// Normally you would not hard-code the password in source. You should instead obtain it
// from an interactive prompt, environment variable, or a secrets vault.
$password = 'mySshPassword';
$success = $ssh->AuthenticatePw('mySshLogin',$password);
if ($success == false) {
print $ssh->lastErrorText() . "\n";
exit;
}
// Open a session channel. A negative return value indicates failure.
$channelNum = $ssh->OpenSessionChannel();
if ($channelNum < 0) {
print $ssh->lastErrorText() . "\n";
exit;
}
// Set environment variables for the channel. Multiple variables may be requested.
$success = $ssh->SendReqSetEnv($channelNum,'LANG','en_US.UTF-8');
if ($success == false) {
print $ssh->lastErrorText() . "\n";
exit;
}
$success = $ssh->SendReqSetEnv($channelNum,'MY_APP_MODE','production');
if ($success == false) {
print $ssh->lastErrorText() . "\n";
exit;
}
// Now run the command, which sees the requested environment.
$success = $ssh->SendReqExec($channelNum,'echo $MY_APP_MODE');
if ($success == false) {
print $ssh->lastErrorText() . "\n";
exit;
}
// IMPORTANT: Set a read timeout. ReadTimeoutMs defaults to 0, which means no limit -- without
// it, this call waits forever if the server never sends channel close.
$ssh->put_ReadTimeoutMs(15000);
$success = $ssh->ChannelReceiveToClose($channelNum);
if ($success == false) {
print $ssh->lastErrorText() . "\n";
exit;
}
$output = $ssh->getReceivedText($channelNum,'utf-8');
if ($ssh->get_LastMethodSuccess() == false) {
print $ssh->lastErrorText() . "\n";
exit;
}
print $output . "\n";
$ssh->Disconnect();
?>