使用java登入遠端LINUX並對服務實現各種操作

我有健康發表於2018-05-05

在訪問linux時,首先需要使用工具類jar包:ganymed-ssh2

登入遠端伺服器:

public boolean login(){
	//建立遠端連線,預設連線埠為22,如果不使用預設,可以使用方法
	//new Connection(ip, port)建立物件
	Connection conn = new Connection(ip);        
	try {
		//連線遠端伺服器
		conn.connect();
		//使用使用者名稱和密碼登入
        return conn.authenticateWithPassword(usr, psword);
	} catch (IOException e) {   
		System.err.printf("使用者%s密碼%s登入伺服器%s失敗!", usr, psword, ip);
		e.printStackTrace();
  }
  return false;
}
/**
  * 上傳本地檔案到伺服器目錄下
  * @param conn Connection物件
  * @param fileName 本地檔案
  * @param remotePath 伺服器目錄
  */
public void putFile(Connection conn, String fileName, String remotePath){
	SCPClient sc = new SCPClient(conn);
	try {
		//將本地檔案放到遠端伺服器指定目錄下,預設的檔案模式為 0600,即 rw,
		//如要更改模式,可呼叫方法 put(fileName, remotePath, mode),模式須是4位數字且以0開頭
		sc.put(fileName, remotePath);
	} catch (IOException e) {
		e.printStackTrace();
	}
}
/**
  * 下載伺服器檔案到本地目錄
  * @param fileName 伺服器檔案
  * @param localPath 本地目錄
  */
public void copyFile(Connection conn, String fileName,String localPath){
	SCPClient sc = new SCPClient(conn);
	try {
		sc.get(fileName, localPath);
	} catch (IOException e) {
		e.printStackTrace();
	}
}
/**
 * 在遠端LINUX伺服器上,在指定目錄下,獲取檔案各個屬性
 * @param[in] conn Conncetion物件
 * @param[in] remotePath 遠端主機的指定目錄
 */
public void getFileProperties(Conncetion conn, String remotePath){
	try {
		SFTPv3Client sft = new SFTPv3Client(conn);
		Vector<?> v = sft.ls(remotePath);
       
		for(int i=0;i<v.size();i++){
			SFTPv3DirectoryEntry s = new SFTPv3DirectoryEntry();
			s = (SFTPv3DirectoryEntry) v.get(i);
			//檔名
			String filename = s.filename;
			//檔案的大小
			Long fileSize = s.attributes.size;
		}
			
		sft.close();
       
	} catch (Exception e1) {
		e1.printStackTrace();
	}
}
/**
 * 在遠端LINUX伺服器上,在指定目錄下,刪除指定檔案
 * @param[in] fileName 檔名
 * @param[in] remotePath 遠端主機的指定目錄
 * @return
 */
public void delFile(String remotePath, String fileName){
	try {
		SFTPv3Client sft = new SFTPv3Client(conn);
		//獲取遠端目錄下檔案列表
		Vector<?> v = sft.ls(remotePath);
   
		for(int i=0;i<v.size();i++){
			SFTPv3DirectoryEntry s = new SFTPv3DirectoryEntry();
			s = (SFTPv3DirectoryEntry) v.get(i);
			//判斷列表中檔案是否與指定檔名相同
			if(s.filename.equals(fileName)){
				//rm()方法中,須是檔案絕對路徑+檔名稱
				sft.rm(remotePath + s.filename);
			}
		sft.close();
	} catch (Exception e1) {
		e1.printStackTrace();
	}
}

/**
 * 執行指令碼
 * @param conn Connection物件
 * @param cmds 要在linux上執行的指令
 */
public int exec(Connection conn, String cmds){
	InputStream stdOut = null;
	InputStream stdErr = null;
	int ret = -1;
	try {
		//在connection中開啟一個新的會話
		Session session = conn.openSession();
		//在遠端伺服器上執行linux指令
		session.execCommand(cmds);
		//指令執行結束後的輸出
		stdOut = new StreamGobbler(session.getStdout());
		//指令執行結束後的錯誤
		stdErr = new StreamGobbler(session.getStderr());
		//等待指令執行結束
		session.waitForCondition(ChannelCondition.EXIT_STATUS, TIME_OUT);
	   	//取得指令執行結束後的狀態
		ret = session.getExitStatus(); 
		
		conn.close();
	}catch(Exception e){
		 e.printStackTrace();
	}

	return ret;
}






相關文章