Example: /Network/SSH/SSH execute

Online Documentation   -   Statistics   -   FAQ   -   Plugin Parts (All, Dependencies)   -   Class hierarchy

New in Version 22.2 22.3 22.4 22.5 23.0 23.1 23.2 23.3 23.4 23.5 24.0 24.1

The list of the   topics,   classes,   interfaces,   controls,   modules,   global methods by category,   global methods by name,   screenshots,   licenses   and   examples.

Platforms to show: All Mac Windows Linux Cross-Platform

/Network/SSH/SSH execute


Required plugins for this example: MBS Network Plugin

You find this example project in your Plugins Download as a Xojo project file within the examples folder: /Network/SSH/SSH execute

This example is the version from Sun, 3rd Mar 2018.

Project "SSH execute.xojo_binary_project"
Class App Inherits ConsoleApplication
EventHandler Function Run(args() as String) As Integer const Address = "localhost" const username = "cs" const password = "xxx" const keyfile1 = "" const keyfile2 = "" const commandline = "/bin/ls" dim hostAddr as string = System.Network.LookupIPAddress(Address) print hostAddr //* Create a session instance and start it up. This will trade welcome //* banners, exchange keys, and setup crypto, compression, and MAC layers dim session as new MySSH2SessionMBS(hostAddr, 22) session.MyPassword = password if session.Handle = 0 then print "Failed to connect socket!" Return 1 end if session.SessionHandshake if session.lasterror<>0 then print "Failure establishing SSH session" Return 9 end if //* At this point we havn't authenticated. The first thing to do is check //* the hostkey's fingerprint against our known hosts Your app may have it //* hard coded, may go to a file, may present it to the user, that's your //* call dim fingerprint as string = session.HostKeyHash(session.kHostKeyHashSHA1) print "Fingerprint: "+EncodeHex(fingerprint) //* check what authentication methods are available */ dim userauthlist as string = session.UserAuthList(username) dim authPassword as Boolean = false dim authKeyboardInteractive as Boolean = false dim authPublickey as Boolean = false print "Authentication methods: "+ userauthlist if instr(userauthlist, "password")>0 then authPassword = true end if if instr(userauthlist, "keyboard-interactive")>0 then authKeyboardInteractive = true end if if instr(userauthlist, "publickey")>0 then authPublickey = true end if if authPassword then //* We could authenticate via password */ session.UserAuthPassword(username, password) if session.LastError = 0 then // ok print "Authentication by password succeeded." else // failed print "Authentication by password failed!" Return 1 end if elseif authKeyboardInteractive then //* Or via keyboard-interactive */ session.UserAuthKeyboardInteractive username if session.LastError <> 0 then print "Authentication by keyboard-interactive failed!" return 10 else print "Authentication by keyboard-interactive succeeded." end if //* Or by public key */ elseif authPublickey then session.UserAuthPublicKeyFromFile(username, keyfile1, keyfile2, password) if session.LastError <> 0 then print "Authentication by public key failed!" Return 4 else print "Authentication by public key succeeded." end if else print "No supported authentication methods found!" Return 3 end if //* Request a shell */ dim channel as SSH2ChannelMBS = session.OpenSession if channel = nil then print "Unable to open a session" Return 4 end if channel.SetBlocking false app.DoEvents 10 // read greetings dim s as string = channel.Read(10000) print s // execute command line app.DoEvents 10 channel.execute commandline print "Lasterror: "+str(channel.LastError) print str(Ticks) // wait until things are okay // the following loop seems to be wrong and only causes delays! 'while channel.LastError = -37 'channel.execute commandline 'print "Lasterror: "+str(channel.LastError) 'print str(Ticks) 'session.WaitSocket 'print str(Ticks) 'wend ' if channel.LastError <> 0 then print "Failed with error: "+str(channel.LastError) end if print "now wait for data" // ok session.WaitSocket do session.WaitSocket app.DoEvents 10 s = channel.Read(10000) if channel.LastError = session.kErrorEagain then // no answer yet Continue else print s exit end if s = channel.ReadStdErr(10000) if s<>"" then print s Break // got error output end if loop channel.Close channel = nil session.Disconnect "Normal Shutdown, Thank you for playing" session = nil print "done" Return 0 End EventHandler
End Class
Class MySSH2SessionMBS Inherits SSH2SessionMBS
EventHandler Sub KeyboardCallback(Name as string, Instruction as string, PromptCount as integer, Prompts() as SSH2UserAuthKeyboardInteractivePromptMBS, responses() as SSH2UserAuthKeyboardInteractiveResponseMBS) print "Name: "+Name print "Instruction: "+Instruction for each p as SSH2UserAuthKeyboardInteractivePromptMBS in Prompts print p.Text next if PromptCount = 1 then responses(0).Text = MyPassword end if End EventHandler
Property MyPassword As string
End Class
End Project

See also:

The items on this page are in the following plugins: MBS Network Plugin.


💬 Ask a question or report a problem