Sample code for 30+ languages & platforms
Java

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 Java Downloads

Chilkat2 Java
import com.chilkatsoft.chilkat2.ChilkatException;
import com.chilkatsoft.chilkat2.Ssh;

public class ChilkatExample {

    public static void main(String[] args) {
        // 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 ssh = new Ssh();

        int sshPort = 22;
        try {
            ssh.connect("ssh.example.com", sshPort);
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        // 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.
        String password = "mySshPassword";

        try {
            ssh.authenticatePw("mySshLogin", password);
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        // Open a session channel.  A negative return value indicates failure.
        int channelNum = ssh.openSessionChannel();
        if (channelNum < 0) {
            System.out.println(ssh.getLastErrorText());
            return;
        }

        // Set environment variables for the channel.  Multiple variables may be requested.
        String output;
        try {
            ssh.sendReqSetEnv(channelNum, "LANG", "en_US.UTF-8");

            ssh.sendReqSetEnv(channelNum, "MY_APP_MODE", "production");

            // Now run the command, which sees the requested environment.
            ssh.sendReqExec(channelNum, "echo $MY_APP_MODE");

            // 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.setReadTimeoutMs(15000);

            ssh.channelReceiveToClose(channelNum);

            output = ssh.getReceivedText(channelNum, "utf-8");
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        System.out.println(output);

        ssh.disconnect();
    }
}