程式扎記: [ FLib ] JExpect : Python Pexpect 的 Java 版本 (2)

標籤

2015年2月11日 星期三

[ FLib ] JExpect : Python Pexpect 的 Java 版本 (2)

Preface
延續 前一篇的介紹, 如果你需要與 Linux Shell 的命令互動, 如 passwdscp etc, 那可以參考下面的使用範例. 在 JExpect 中整合了 JSch 套件 來完成與 Linux Shell 的互動.

SSH Login Remote Server
考慮如果你要使用 ssh 連到遠端終端機, 可以使用 JExpect 上的 API:
  1. /** 
  2. * SSH to connect remote machine. 
  3.  
  4. * @param host: Hostname of remote machine. 
  5. * @param user: User name to login. 
  6. * @param password: Password to Login 
  7. * @return 
  8. *  Object which implemented ISpawnProcess interface.  
  9. * @throws Exception 
  10. */  
  11. public static ISpawnProcess SpawnShell(String host, String user, String password) throws Exception  
一個連接的範例代碼如下:
  1. def host = 'localhost'  
  2. def user = 'john'  
  3. def pwd  = 'john7810'  
  4.   
  5. ISpawnProcess sp = JExpect.SpawnShell(host, user, pwd)  
如果成功登入並取得 ISpawnProcess 實作的物件, 此時你便可以繼續與終端 terminal 互動, 譬如你要 透過命令 "netstat -tunlp" 檢視遠端連線狀態, 則可以透過 API:sendLine() 來執行命令, 範例代碼如下:
  1. sp.sendLine('netstat -tunlp')  
接著你可以使用 API:readLines(timeout) 取回 Stdout 的輸出, 參考下面範例代碼:
  1. sp.readLines(2000).each{ line->  
  2.     printf("Stdout> ${line}\n")  
  3. }  
  4. println()  
部分執行結果如下:
Stdout> [john@route ~]$ netstat -tunlp
Stdout> (Not all processes could be identified, non-owned process info
Stdout> will not be shown, you would have to be root to see it all.)
Stdout> Active Internet connections (only servers)
Stdout> Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
Stdout> tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN -
...
Stdout> udp 0 0 :::50752 :::*

或是你可以使用 API:interact() 並使用鍵盤與終端互動:
執行結果:


最後要結束程式前, 記得執行下面代碼關閉與遠端連線:
  1. sp.close()      

Supplement
Linux Change Password
JSch - Java Secure Channel
JSch is a pure Java implementation of SSH2.
JSch allows you to connect to an sshd server and use port forwarding, X11 forwarding, file transfer, etc., and you can integrate its functionality into your own Java programs. JSch is licensed under BSD style license.

This message was edited 20 times. Last update was at 12/02/2015 12:30:07

沒有留言:

張貼留言

網誌存檔

關於我自己

我的相片
Where there is a will, there is a way!