{"id":1689,"date":"2016-10-09T19:08:26","date_gmt":"2016-10-09T17:08:26","guid":{"rendered":"http:\/\/blog.rabahi.net\/?page_id=1689"},"modified":"2017-05-11T11:17:13","modified_gmt":"2017-05-11T09:17:13","slug":"java-ssh-client","status":"publish","type":"page","link":"https:\/\/blog.rabahi.net\/?page_id=1689","title":{"rendered":"Java &#8211; SSH Client"},"content":{"rendered":"<div id=\"toc_container\" class=\"no_bullets\"><p class=\"toc_title\">Contents<\/p><ul class=\"toc_list\"><li><a href=\"#Using_JSCH\"><span class=\"toc_number toc_depth_1\">1<\/span> Using JSCH<\/a><ul><li><a href=\"#Dependencies\"><span class=\"toc_number toc_depth_2\">1.1<\/span> Dependencies<\/a><\/li><li><a href=\"#Session\"><span class=\"toc_number toc_depth_2\">1.2<\/span> Session<\/a><ul><li><a href=\"#Open_session\"><span class=\"toc_number toc_depth_3\">1.2.1<\/span> Open session<\/a><\/li><li><a href=\"#Close_session\"><span class=\"toc_number toc_depth_3\">1.2.2<\/span> Close session<\/a><\/li><\/ul><\/li><li><a href=\"#Channel\"><span class=\"toc_number toc_depth_2\">1.3<\/span> Channel<\/a><ul><li><a href=\"#Run_command\"><span class=\"toc_number toc_depth_3\">1.3.1<\/span> Run command<\/a><\/li><li><a href=\"#Send_File\"><span class=\"toc_number toc_depth_3\">1.3.2<\/span> Send File<\/a><\/li><li><a href=\"#Read_File\"><span class=\"toc_number toc_depth_3\">1.3.3<\/span> Read File<\/a><\/li><\/ul><\/li><\/ul><\/li><li><a href=\"#Using_Apache_Mina\"><span class=\"toc_number toc_depth_1\">2<\/span> Using Apache Mina<\/a><ul><li><a href=\"#Dependencies-2\"><span class=\"toc_number toc_depth_2\">2.1<\/span> Dependencies<\/a><\/li><li><a href=\"#Session-2\"><span class=\"toc_number toc_depth_2\">2.2<\/span> Session<\/a><ul><li><a href=\"#Open_session-2\"><span class=\"toc_number toc_depth_3\">2.2.1<\/span> Open session<\/a><\/li><li><a href=\"#Close_session-2\"><span class=\"toc_number toc_depth_3\">2.2.2<\/span> Close session<\/a><\/li><\/ul><\/li><li><a href=\"#Channel-2\"><span class=\"toc_number toc_depth_2\">2.3<\/span> Channel<\/a><ul><li><a href=\"#Run_command-2\"><span class=\"toc_number toc_depth_3\">2.3.1<\/span> Run command<\/a><\/li><\/ul><\/li><\/ul><\/li><\/ul><\/div>\n<h1><span id=\"Using_JSCH\">Using JSCH<\/span><\/h1>\n<h2><span id=\"Dependencies\">Dependencies<\/span><\/h2>\n<p>If you use maven, add this to your pom.xml :<\/p>\n<pre lang=\"xml\">\r\n<dependency>\r\n  <groupId>com.jcraft<\/groupId>\r\n  <artifactId>jsch<\/artifactId>\r\n  <version>0.1.53<\/version>\r\n<\/dependency>\r\n<\/pre>\n<h2><span id=\"Session\">Session<\/span><\/h2>\n<h3><span id=\"Open_session\">Open session<\/span><\/h3>\n<pre lang=\"java\">\r\nProperties config = new Properties(); \r\nconfig.put(\"StrictHostKeyChecking\", \"no\");\r\n\r\nJSch jsch = new JSch();\r\nsession=jsch.getSession(login, hostname, port);\r\n\r\nsession.setPassword(password);\r\nsession.setConfig(config);\r\nsession.connect();\r\n<\/pre>\n<h3><span id=\"Close_session\">Close session<\/span><\/h3>\n<pre lang=\"java\">\r\nif(session != null && session.isConnected()) {\r\n  session.disconnect();\r\n}\r\n<\/pre>\n<h2><span id=\"Channel\">Channel<\/span><\/h2>\n<h3><span id=\"Run_command\">Run command<\/span><\/h3>\n<pre lang=\"java\">\r\nChannelExec channel=(ChannelExec) session.openChannel(\"exec\");\r\nBufferedReader reader=new BufferedReader(new InputStreamReader(channel.getInputStream()));\t\t\r\nchannel.setCommand(command);\r\nchannel.setErrStream(System.err);\r\nchannel.setInputStream(null);\r\nchannel.connect();\t\t\t\r\n\r\nString line;\r\nwhile ((line = reader.readLine()) != null) {\r\n\tSystem.out.println(line);\r\n}\r\n\r\nchannel.disconnect();\r\n<\/pre>\n<h3><span id=\"Send_File\">Send File<\/span><\/h3>\n<pre lang=\"java\">\r\nChannelSftp channel = (ChannelSftp) session.openChannel(\"sftp\");\r\nchannel.connect();\r\n\r\nchannel.put(new ByteArrayInputStream(sourceFile.getBytes()), destinationFile);\r\nchannel.disconnect();\r\n<\/pre>\n<h3><span id=\"Read_File\">Read File<\/span><\/h3>\n<pre lang=\"java\">\r\nChannelSftp channel = (ChannelSftp) session.openChannel(\"sftp\");\r\nchannel.connect();\r\n\r\nByteArrayOutputStream bos = new ByteArrayOutputStream();\r\nInputStream is = c.get(filePath);\r\n\r\ntry {\r\n   byte[] buffer = new byte[256];\r\n   int count;\r\n   while (-1 != (count = is.read(buffer))) {\r\n     bos.write(buffer, 0, count);\r\n   }\r\n} finally {\r\n  IoUtils.closeQuietly(is);\r\n}\r\n\r\nchannel.disconnect();\r\nreturn new String(bos.toByteArray());\r\n<\/pre>\n<h1><span id=\"Using_Apache_Mina\">Using Apache Mina<\/span><\/h1>\n<h2><span id=\"Dependencies-2\">Dependencies<\/span><\/h2>\n<p>If you use maven, add this to your pom.xml :<\/p>\n<pre lang=\"xml\">\r\n<dependencies>\r\n  <dependency>\r\n    <groupId>org.apache.sshd<\/groupId>\r\n    <artifactId>sshd-core<\/artifactId>\r\n    <version>${apache-mina.version}<\/version>\r\n  <\/dependency>\r\n<\/dependencies>\r\n<\/pre>\n<h2><span id=\"Session-2\">Session<\/span><\/h2>\n<h3><span id=\"Open_session-2\">Open session<\/span><\/h3>\n<pre lang=\"java\">\r\ntry(SshClient client = SshClient.setUpDefaultClient()) {\r\n  client.start();\r\n\r\n  session = client.connect(login, hostname, port)\r\n  \t\t  .verify(7L, TimeUnit.SECONDS)\r\n\t\t  .getSession();\r\n\r\n  session.addPasswordIdentity(password);\r\n  session.auth().verify(5L, TimeUnit.SECONDS);\r\n}\r\ncatch (IOException e) {\r\n  LOGGER.debug(\"Open SSH Session\",e);\r\n}\r\n<\/pre>\n<h3><span id=\"Close_session-2\">Close session<\/span><\/h3>\n<pre lang=\"java\">\r\nif(session != null && session.isOpen()) {\r\n  session.close(true);\r\n}\r\n<\/pre>\n<h2><span id=\"Channel-2\">Channel<\/span><\/h2>\n<h3><span id=\"Run_command-2\">Run command<\/span><\/h3>\n<pre lang=\"java\">\r\nString response = session.executeRemoteCommand(command,stderr,Charset.defaultCharset());\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Contents1 Using JSCH1.1 Dependencies1.2 Session1.2.1 Open session1.2.2 Close session1.3 Channel1.3.1 Run command1.3.2 Send File1.3.3 Read File2 Using Apache Mina2.1 Dependencies2.2 Session2.2.1 Open session2.2.2 Close session2.3 Channel2.3.1 Run command Using JSCH Dependencies If you use maven, add this to your pom.xml : com.jcraft jsch 0.1.53 Session Open session Properties config = new Properties(); config.put(&#8220;StrictHostKeyChecking&#8221;, &#8220;no&#8221;); JSch [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":1538,"menu_order":16,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1689","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=\/wp\/v2\/pages\/1689","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1689"}],"version-history":[{"count":7,"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=\/wp\/v2\/pages\/1689\/revisions"}],"predecessor-version":[{"id":1973,"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=\/wp\/v2\/pages\/1689\/revisions\/1973"}],"up":[{"embeddable":true,"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=\/wp\/v2\/pages\/1538"}],"wp:attachment":[{"href":"https:\/\/blog.rabahi.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1689"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}