Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(AutoIt) SSH Remote ShellDemonstrates how to start a shell on a remote SSH server, run a command, and retrieve the output.
; This example assumes the Chilkat API to have been previously unlocked. ; See Global Unlock Sample for sample code. $oSsh = ObjCreate("Chilkat.Ssh") ; Hostname may be an IP address or hostname: Local $sHostname = "www.some-ssh-server.com" Local $iPort = 22 ; Connect to an SSH server: Local $bSuccess = $oSsh.Connect($sHostname,$iPort) If ($bSuccess <> True) Then ConsoleWrite($oSsh.LastErrorText & @CRLF) Exit EndIf ; Wait a max of 5 seconds when reading responses.. $oSsh.IdleTimeoutMs = 5000 ; Authenticate using login/password: $bSuccess = $oSsh.AuthenticatePw("myLogin","myPassword") If ($bSuccess <> True) Then ConsoleWrite($oSsh.LastErrorText & @CRLF) Exit EndIf ; Open a session channel. (It is possible to have multiple ; session channels open simultaneously.) Local $iChannelNum $iChannelNum = $oSsh.OpenSessionChannel() If ($iChannelNum < 0) Then ConsoleWrite($oSsh.LastErrorText & @CRLF) Exit EndIf ; Some SSH servers require a pseudo-terminal ; If so, include the call to SendReqPty. If not, then ; comment out the call to SendReqPty. ; Note: The 2nd argument of SendReqPty is the terminal type, ; which should be something like "xterm", "vt100", "dumb", etc. ; A "dumb" terminal is one that cannot process escape sequences. ; Smart terminals, such as "xterm", "vt100", etc. process ; escape sequences. If you select a type of smart terminal, ; your application will receive these escape sequences ; included in the command's output. Use "dumb" if you do not ; want to receive escape sequences. (Assuming your SSH ; server recognizes "dumb" as a standard dumb terminal.) Local $sTermType = "dumb" Local $iWidthInChars = 120 Local $iHeightInChars = 40 ; Use 0 for pixWidth and pixHeight when the dimensions ; are set in number-of-chars. Local $iPixWidth = 0 Local $iPixHeight = 0 $bSuccess = $oSsh.SendReqPty($iChannelNum,$sTermType,$iWidthInChars,$iHeightInChars,$iPixWidth,$iPixHeight) If ($bSuccess <> True) Then ConsoleWrite($oSsh.LastErrorText & @CRLF) Exit EndIf ; Start a shell on the channel: $bSuccess = $oSsh.SendReqShell($iChannelNum) If ($bSuccess <> True) Then ConsoleWrite($oSsh.LastErrorText & @CRLF) Exit EndIf ; Start a command in the remote shell. This example ; will send a "ls" command to retrieve the directory listing. $bSuccess = $oSsh.ChannelSendString($iChannelNum,"ls" & @CRLF,"ansi") If ($bSuccess <> True) Then ConsoleWrite($oSsh.LastErrorText & @CRLF) Exit EndIf ; Send an EOF. This tells the server that no more data will ; be sent on this channel. The channel remains open, and ; the SSH client may still receive output on this channel. $bSuccess = $oSsh.ChannelSendEof($iChannelNum) If ($bSuccess <> True) Then ConsoleWrite($oSsh.LastErrorText & @CRLF) Exit EndIf ; Read whatever output may already be available on the ; SSH connection. ChannelReadAndPoll returns the number of bytes ; that are available in the channel's internal buffer that ; are ready to be "picked up" by calling GetReceivedText ; or GetReceivedData. ; A return value of -1 indicates failure. ; A return value of -2 indicates a failure via timeout. ; The ChannelReadAndPoll method waits ; for data to arrive on the connection usingi the IdleTimeoutMs ; property setting. Once the first data arrives, it continues ; reading but instead uses the pollTimeoutMs passed in the 2nd argument: ; A return value of -2 indicates a timeout where no data is received. Local $iN Local $iPollTimeoutMs = 2000 $iN = $oSsh.ChannelReadAndPoll($iChannelNum,$iPollTimeoutMs) If ($iN < 0) Then ConsoleWrite($oSsh.LastErrorText & @CRLF) Exit EndIf ; Close the channel: $bSuccess = $oSsh.ChannelSendClose($iChannelNum) If ($bSuccess <> True) Then ConsoleWrite($oSsh.LastErrorText & @CRLF) Exit EndIf ; Perhaps we did not receive all of the commands output. ; To make sure, call ChannelReceiveToClose to accumulate any remaining ; output until the server's corresponding "channel close" is received. $bSuccess = $oSsh.ChannelReceiveToClose($iChannelNum) If ($bSuccess <> True) Then ConsoleWrite($oSsh.LastErrorText & @CRLF) Exit EndIf ; Let's pickup the accumulated output of the command: Local $sCmdOutput = $oSsh.GetReceivedText($iChannelNum,"ansi") If ($oSsh.LastMethodSuccess <> True) Then ConsoleWrite($oSsh.LastErrorText & @CRLF) Exit EndIf ; Display the remote shell's command output: ConsoleWrite($sCmdOutput & @CRLF) ; Disconnect $oSsh.Disconnect |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.