1.Apache sshd
Apache sshd is a 100% pure Java Library of SSH protocol that supports both client and server. The SSHD library is based on the Apache Mina project (a scalable, high-performance asynchronous IO Library). Official website: http://mina.apache.org/sshd-project/documentation.html
Client Sample code:
Public voidClenttest ()throwsioexception {String cmd= "Ifconfig"; Sshclient Client=sshclient.setupdefaultclient (); Client.start (); Clientsession Session=client.connect ("bellring", "10.2.48.179", 22). await (). GetSession (); Session.addpasswordidentity ("Bellring"); if(!Session.auth (). await (). Issuccess ()) System.out.println ("Auth Failed"); Channelexec EC=Session.createexecchannel (CMD); Ec.setout (System.out); Ec.open (); Ec.waitfor (clientchannel.closed,0); Ec.close (); Client.stop (); }
Public voidSshdclientsftptest ()throwsIOException, interruptedexception {Path src=paths.get ("Src_sshd.txt"); Files.deleteifexists (SRC); Files.createfile (SRC); Files.write (SRC,"Adsfa\nsdfs". GetBytes ()); Sshclient Client=sshclient.setupdefaultclient (); Client.start (); Clientsession Session=client.connect ("bellring", "10.2.48.179", 22). await (). GetSession (); Session.addpasswordidentity ("Bellring"); if(!Session.auth (). await (). Issuccess ()) System.out.println ("Auth Failed"); Sftpclient sftp=session.createsftpclient (); for(Direntry De:sftp.readDir ("."))) System.out.println (De.filename+" "+De.attributes.type); OutputStream OS=sftp.write ("Test/dst_sshd.txt"); Files.copy (src, OS); Os.close (); //sftp.remove ("Delete_file.txt");InputStream is=sftp.read ("Test/dst_sshd.txt"); Path DST=paths.get ("Dst1_sshd.txt"); Files.deleteifexists (DST); Files.copy (is, DST); Is.close (); Sftp.close (); Client.stop (); }
Server-side Sample code:
Public voidServertest ()throwsIOException, interruptedexception {sshserver sshd=Sshserver.setupdefaultserver (); Sshd.setport (22); //*give host key Generator a path, when sshd server restart, the same key would be load and used to authenticate the Serv ERSshd.setkeypairprovider (NewSimplegeneratorhostkeyprovider (Paths.get ("Hostkey.ser"))); Sshd.setpasswordauthenticator (NewPasswordauthenticator () {@Override Public BooleanAuthenticate (string username, string password, serversession session) {SYSTEM.OUT.PRINTLN ("Authen:user=" +username+ "password=" +password); if("Bellring". Equals (username) && "123456". Equals (password))return true; return false; }}); //Use file ~/.ssh/authorized_keysSshd.setpublickeyauthenticator (NewDefaultauthorizedkeysauthenticator (false)); //* Commandfactory can userd in addition to the Shellfactory,//* It can also be used instead of the shellfactory. //* The commandfactory is used when direct commands was sent to the SSH server,//* As this was when running SSH localhost shutdown or scp xxxScpcommandfactory scpcmdfactory=Newscpcommandfactory (); Scpcmdfactory.setdelegatecommandfactory (Newcommandfactory () { Publiccommand CreateCommand (String command) {System.out.println ("Command = \" "+ Command +" \ ""); return NewProcessshellfactory ("cmd/c" +command). Split ("") . Create (); } }); Sshd.setcommandfactory (scpcmdfactory); Sshd.start (); }
2.JSch (Java Secure Channel)
Jsch is also a pure Java implementation of SSH2. Dependent on the JavaTM Cryptography Extension (JCE). Jsch supports clients.
Official website: http://www.jcraft.com/jsch/
Example: http://www.jcraft.com/jsch/examples/
Example of client remote command execution:
Public voidTestjschclient ()throwsjschexception, interruptedexception {Jsch Jsch=NewJsch (); Session Session=jsch.getsession ("bellring", "10.2.48.179", 22); Session.setconfig ("Stricthostkeychecking", "no"); //Set Auth info interactively//Session.setuserinfo (New UserInfo () {...});Session.setpassword ("Bellring"); Session.connect (); Com.jcraft.jsch.ChannelExec EC= (com.jcraft.jsch.ChannelExec) session.openchannel ("Exec"); Ec.setcommand ("Ifconfig"); Ec.setinputstream (NULL); Ec.seterrstream (System.err); Ec.setoutputstream (System.out); Ec.connect (); while(!ec.isclosed ()) Thread.Sleep (500); Ec.disconnect (); Session.disconnect (); }
SFTP File Operation Example
Public voidTestjschsftp ()throwsjschexception, Interruptedexception, Sftpexception, IOException {Jsch Jsch=NewJsch (); Session Session=jsch.getsession ("bellring", "10.2.48.179", 22); Session.setconfig ("Stricthostkeychecking", "no"); //Set Auth info interactively//Session.setuserinfo (New UserInfo () {...});Session.setpassword ("Bellring"); Session.connect (); Com.jcraft.jsch.ChannelSftp Sftpchannel= (com.jcraft.jsch.ChannelSftp) session.openchannel ("Sftp"); Sftpchannel.connect (); Path src=paths.get ("Src.txt"); Files.deleteifexists (SRC); Files.createfile (SRC); Files.write (SRC,"Adsfasdfs". GetBytes ()); Vector Vector=sftpchannel.ls ("."); for(Object obj:vector) System.out.println (obj); SFTPCHANNEL.CD ("Test"); Sftpchannel.put ("Src.txt", "Dst.txt"); Sftpchannel.get ("Dst.txt", "Dst1.txt"); SFTPCHANNEL.RM ("Dst.txt"); Sftpchannel.disconnect (); Session.disconnect (); System.out.println ("Done"); }
Java SSH Library: Apache sshd Library and Jsch library (Java Secure Channel)