Ganymed SSH-2 用标准java (tested on J2SE 1.4.2 and 5.0) 实现了SSH-2 protocol.
It allows one to connect to SSH servers from within Java programs. It supports SSH sessions (remote command execution and shell access), local and remote port forwarding, local stream forwarding, X11 forwarding, SCP and SFTP. There are no dependencies on any JCE provider, as all crypto functionality is included.
- Connectionconn=newConnection(ServerHost);
- booleanisAuthenticated=conn.authenticateWithPassword(toServerUserName,toServerPassword);//支持密码链接和私钥链接(ssh建立无密码链接)
- Sessionsess=conn.openSession();
- sess.execCommand(command);
- sess.getStdout();//返回执行命令后信息
- sess.getStderr();//返回错误信息
注意的地方:如果你需要执行多个linux控制台脚本,比如第一个脚本的返回结果是第二个脚本的入参,你必须打开多个Session,也就是多次调用
Session sess = conn.openSession();,使用完毕记得关闭就可以了
实现例子
利用Ganymed SSH-2模拟SSH操作
-
- @Test
- publicvoidtestSsh(){
- Stringhostname="192.168.0.1";
- Stringusername="root";
- Stringpassword="password";
- try{
- /*Createaconnectioninstance*/
- Connectionconn=newConnection(hostname);
- /*Nowconnect*/
- conn.connect();
- System.out.println("connectok");
- /*
- *Authenticate.IfyougetanIOExceptionsayingsomethinglike
- *"Authenticationmethodpasswordnotsupportedbytheserveratthisstage."
- *thenpleasechecktheFAQ.
- */
- booleanisAuthenticated=conn.authenticateWithPassword(username,password);
- if(isAuthenticated==false)
- thrownewIOException("Authenticationfailed.");
- System.out.println("Authenticationok");
- /*Createasession*/
- Sessionsess=conn.openSession();
- sess.execCommand("uname-a");
- System.out.println("Hereissomeinformationabouttheremotehost:");
- /*
- *Thisbasicexampledoesnothandlestderr,whichissometimes
- *dangerous(pleasereadtheFAQ).
- */
- InputStreamstdout=newStreamGobbler(sess.getStdout());
- BufferedReaderbr=newBufferedReader(newInputStreamReader(stdout));
- while(true){
- Stringline=br.readLine();
- if(line==null)
- break;
- System.out.println(line);
- }
- /*Showexitstatus,ifavailable(otherwise"null")*/
- System.out.println("ExitCode:"+sess.getExitStatus());
- /*Closethissession*/
- sess.close();
- /*Closetheconnection*/
- conn.close();
- }catch(IOExceptione){
- e.printStackTrace(System.err);
- System.exit(2);
- }
- }
Authentication ok
Here is some information about the remote host:
Linux localhost.localdomain 2.6.22 #1 SMP Wed Aug 13 11:24:59 CST 2008 i686 i686 i386 GNU/Linux
ExitCode: 0
本文介绍如何使用 GanymedSSH-2 库在 Java 中实现 SSH-2 协议,支持远程命令执行、端口转发等功能。文中提供了一个简单的示例,展示如何连接到 SSH 服务器并执行命令。
1万+

被折叠的 条评论
为什么被折叠?



