DataFlex
DataFlex
Check Whether an SSH Exit Status Was Received
See more SSH Examples
Demonstrates the Chilkat Ssh.ChannelReceivedExitStatus method, which reports whether the server supplied an exit-status value for a channel. The only argument is the channel number. When it returns true, call GetChannelExitStatus to read the value.
Background: Always test this before reading the exit status, because the server is not required to send one for every channel type or command — treating a missing status as "0" would silently turn a failure into a success. Exit status is independent of EOF and CLOSE: it can arrive after EOF and either before or together with CLOSE.
Chilkat DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoSsh
Integer iSshPort
String sPassword
Integer iChannelNum
Integer iExitStatus
String sTemp1
Boolean bTemp1
Move False To iSuccess
// Demonstrates the Ssh.ChannelReceivedExitStatus method, which reports whether the server
// supplied an exit-status value for a channel. The only argument is the channel number. When
// it returns True, call GetChannelExitStatus to read the value.
Get Create (RefClass(cComChilkatSsh)) To hoSsh
If (Not(IsComObjectCreated(hoSsh))) Begin
Send CreateComObject of hoSsh
End
Move 22 To iSshPort
Get ComConnect Of hoSsh "ssh.example.com" iSshPort To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoSsh To sTemp1
Showln sTemp1
Procedure_Return
End
// 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.
Move "mySshPassword" To sPassword
Get ComAuthenticatePw Of hoSsh "mySshLogin" sPassword To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoSsh To sTemp1
Showln sTemp1
Procedure_Return
End
Get ComOpenSessionChannel Of hoSsh To iChannelNum
If (iChannelNum < 0) Begin
Get ComLastErrorText Of hoSsh To sTemp1
Showln sTemp1
Procedure_Return
End
Get ComSendReqExec Of hoSsh iChannelNum "test -f /etc/hosts" To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoSsh To sTemp1
Showln sTemp1
Procedure_Return
End
// 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.
Set ComReadTimeoutMs Of hoSsh To 15000
Get ComChannelReceiveToClose Of hoSsh iChannelNum To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoSsh To sTemp1
Showln sTemp1
Procedure_Return
End
// The server is not required to send an exit status for every channel type or command.
Get ComChannelReceivedExitStatus Of hoSsh iChannelNum To bTemp1
If (bTemp1) Begin
Get ComGetChannelExitStatus Of hoSsh iChannelNum To iExitStatus
Showln "Exit status: " iExitStatus
End
Else Begin
Showln "The server did not provide an exit status."
End
Send ComDisconnect To hoSsh
End_Procedure