Sample code for 30+ languages & platforms
Java

Release an SSH Channel's Local Resources

See more SSH Examples

Demonstrates the Chilkat Ssh.ChannelRelease method, which releases Chilkat's retained local resources for a channel after all output and exit information has been retrieved. The only argument is the channel number.

Background: Chilkat retains a channel's buffered output and exit information after the channel closes, so you can still read a command's final output. That retention costs memory, and a long-running program that opens many channels should release each one when finished with it. Note this is not a channel-closing method — it sends neither EOF nor CLOSE. Retrieve everything you need first, because releasing discards it.

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.ChannelRelease method, which releases Chilkat's retained local resources
        // for a channel after all output and exit information has been retrieved.  The only argument is
        // the channel number.

        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;
        }

        String output;
        try {
            ssh.sendReqExec(channelNum, "uname -a");

            // 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);

            // Retrieve everything of interest before releasing the channel.
            ssh.channelReceiveToClose(channelNum);

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

        System.out.println(output);

        // Release the retained local resources.  This does not send EOF or CLOSE.
        ssh.channelRelease(channelNum);

        ssh.disconnect();
    }
}