七、java呼叫ssh往遠端linux上傳檔案
阿新 • • 發佈:2019-02-06
1.匯入maven依賴jar包
<!-- https://mvnrepository.com/artifact/com.jcraft/jsch -->
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.44-1</version>
</dependency>
2.建立SSH2Util類
package com.ksy.fw.base.util; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import com.jcraft.jsch.Channel; import com.jcraft.jsch.ChannelExec; import com.jcraft.jsch.ChannelSftp; import com.jcraft.jsch.JSch; import com.jcraft.jsch.Session; import com.jcraft.jsch.UserInfo; /** * java遠端上傳檔案 * @author lenovo * */ public class SSH2Util { private String host; private String user; private String password; private int port; private Session session; /** * 建立一個連線 * * @param host * 地址 * @param user * 使用者名稱 * @param password * 密碼 * @param port * ssh2埠 */ public SSH2Util(String host, String user, String password, int port) { this.host = host; this.user = user; this.password = password; this.port = port; } private void initialSession() throws Exception { if (session == null) { JSch jsch = new JSch(); session = jsch.getSession(user, host, port); session.setUserInfo(new UserInfo() { public String getPassphrase() { return null; } public String getPassword() { return null; } public boolean promptPassword(String arg0) { return false; } public boolean promptPassphrase(String arg0) { return false; } public boolean promptYesNo(String arg0) { return true; } public void showMessage(String arg0) { } }); session.setPassword(password); session.connect(); } } /** * 關閉連線 * * @throws Exception */ public void close() throws Exception { if (session != null && session.isConnected()) { session.disconnect(); session = null; } } /** * 上傳檔案 * * @param localPath * 本地路徑,若為空,表示當前路徑 * @param localFile * 本地檔名,若為空或是“*”,表示目前下全部檔案 * @param remotePath * 遠端路徑,若為空,表示當前路徑,若伺服器上無此目錄,則會自動建立 * @throws Exception */ public void putFile(String localPath, String localFile, String remotePath) throws Exception { this.initialSession(); Channel channelSftp = session.openChannel("sftp"); channelSftp.connect(); ChannelSftp c = (ChannelSftp) channelSftp; String remoteFile = null; if (remotePath != null && remotePath.trim().length() > 0) { try { c.mkdir(remotePath); } catch (Exception e) { } remoteFile = remotePath + "/."; } else { remoteFile = "."; } String file = null; if (localFile == null || localFile.trim().length() == 0) { file = "*"; } else { file = localFile; } if (localPath != null && localPath.trim().length() > 0) { if (localPath.endsWith("/")) { file = localPath + file; } else { file = localPath + "/" + file; } } c.put(file, remoteFile); channelSftp.disconnect(); } // public static void main(String[] args) { // Ssh2Util ssh = new Ssh2Util("192.168.1.189", "root", "test" , 22); // try { // String rs = ssh.runCommand("ddddd"); // } catch (Exception e) { // e.printStackTrace(); // } // } // command 命令 public String runCommand(String command) throws Exception { // CommonUtil.printLogging("[" + command + "] begin", host, user); this.initialSession(); InputStream in = null; InputStream err = null; BufferedReader inReader = null; BufferedReader errReader = null; int time = 0; String s = null; boolean run = false; StringBuffer sb = new StringBuffer(); Channel channel = session.openChannel("exec"); ((ChannelExec) channel).setCommand(command); channel.setInputStream(null); ((ChannelExec) channel).setErrStream(null); err = ((ChannelExec) channel).getErrStream(); in = channel.getInputStream(); channel.connect(); inReader = new BufferedReader(new InputStreamReader(in, "UTF-8")); errReader = new BufferedReader(new InputStreamReader(err, "UTF-8")); while (true) { s = errReader.readLine(); if (s != null) { sb.append("error:" + s).append("\n"); } else { run = true; break; } } while (true) { s = inReader.readLine(); if (s != null) { sb.append("info:" + s).append("\n"); } else { run = true; break; } } while (true) { if (channel.isClosed() || run) { // CommonUtil.printLogging("[" + command + "] finish: " + // channel.getExitStatus(), host, user); break; } try { Thread.sleep(1000); } catch (Exception ee) { } if (time > 180) { // CommonUtil.printLogging("[" + command + "] finish2: " + // channel.getExitStatus(), host, user); break; } time++; } inReader.close(); errReader.close(); channel.disconnect(); session.disconnect(); System.out.println(sb.toString()); return sb.toString(); } public static void main(String[] args) throws Exception { SSH2Util ssh2Util = new SSH2Util("127.0.0.1", "root","root", 22); ssh2Util.putFile("C:\\Users\\lenovo\\Desktop", "99999.sh","/usr/ksybak/tomcats"); } }