javassh命令(java调用ssh)

本篇文章给大家谈谈javassh命令,以及java调用ssh对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

1、JAVA中的SSH如何解释?2、java 怎么使用sshbase 和远程机器进行交互3、java ssh登陆交换机执行命令4、java ssh linux 编程

JAVA中的SSH如何解释?

SSH 在J2EE项目中表示了3种框架,即 Spring + Struts +Hibernate。 Struts对Model,View和Controller都提供了对应的组件。Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,可以应用在任何使用JDBC的场合,可以在Servlet/JSP的Web应用中使用,也可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

javassh命令(java调用ssh)

java 怎么使用sshbase 和远程机器进行交互

在本地使用 ssh $RemoteNode cmd 可以在执行远程机器上的命令,例如 ssh user@node ls /local 会执行远程机器上的 ls /local 命令,如果想在远程机器上连续执行多条命令,可以用单引号或者双引号将这些命令括起来,

例如:ssh user@node “cd /local; pwd;ls”

如果想在本地启动远程机器上的命令后就返回来,可以这样 ssh user@node ” /local/x.sh 1/dev/null 21 “

注意如果没有“”,例如 ssh user@node cd /local ; ls 则 ls 只会执行 cd /local 命令,ls命令在本地执行,加了双引号或者单引号,则被括起来的命令被当做ssh命令的一个参数,所以会在远程连续执行。

单引号和双引号在ssh命令中的区别:

以一个例子来说明问题,

假设本地机器上配置了JAVA环境变量,在本地执行 echo $JAVA_HOME=/opt/jdk

假若我想查看远程机器上的JAVA环境变量,则只能使用单引号了,ssh user@node ‘ echo $JAVA ‘, 则是’ ‘ 中的$JAVA不会被shell解析,而是当做一个字符串,此时参数 echo $JAVA 传递给了 ssh;

如果我们使用 ssh user@node ” echo $JAVA “,则 shell 首先会解析$JAVA,得到它的值,则该命令就变成了 ssh user@node ‘ echo /opt/jdk ‘ 了

java ssh登陆交换机执行命令

第一步下载java扩展包

第二步:解压文件把 jar包,拷贝到java的库目录下,我的是ubuntu14(/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/ext )

cp ganymed-ssh2-build210.jar /usr/lib/jvm/java-7-openjdk-amd64/jre/lib/ext

第三步: 把默认账户修改成直接的账户密码

yang@yang:~/Downloads/java/ganymed-ssh2-build210/examples$ cat Basic.java

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import ch.ethz.ssh2.Connection;

import ch.ethz.ssh2.Session;

import ch.ethz.ssh2.StreamGobbler;

public class Basic

{

public static void main(String[] args)

{

String hostname = “127.0.0.1”;

String username = “user”;

String password = “password”;

try

{

Connection conn = new Connection(hostname);

conn.connect();

boolean isAuthenticated = conn.authenticateWithPassword(username, password);

if (isAuthenticated == false)

throw new IOException(“Authentication failed.”);

Session sess = conn.openSession();

sess.execCommand(“uname -a date uptime who”);

System.out.println(“Here is some information about the remote host:”);

InputStream stdout = new StreamGobbler(sess.getStdout());

BufferedReader br = new BufferedReader(new InputStreamReader(stdout));

while (true)

{

String line = br.readLine();

if (line == null)

break;

System.out.println(line);

}

System.out.println(“ExitCode: ” + sess.getExitStatus());

sess.close();

conn.close();

}

catch (IOException e)

{

e.printStackTrace(System.err);

System.exit(2);

}

}

}

第四步: 编译 javac Basic.java java Basic

Here is some information about the remote host:

Linux yang 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

2014年 05月 03日 星期六 17:26:00 CST

17:26:00 up 6:09, 4 users, load average: 0.15, 0.21, 0.23

yang :0 2014-05-03 11:17 (:0)

yang pts/2 2014-05-03 16:34 (:0)

yang pts/26 2014-05-03 17:13 (:0)

yang pts/27 2014-05-03 17:24 (:0)

ExitCode: 0

java ssh linux 编程

纯Java通过SSH执行Linux命令的方法及代码

注:此ssh非彼SSH(Struts+Spring+Hibernate)

在Java中,我们可以通过Runtime去执行一些OS的命令,如:

String[] shell = new String[] { ” /bin/sh ” , ” -c ” , ” ls -l ” } ;

Process p = Runtime.getRuntime().exec(shell);

通过在Linux上执行 ssh –help命令,

usage: ssh [-1246AaCfgKkMNnqsTtVvXxY] [-b bind_address] [-c cipher_spec]

[-D [bind_address:]port] [-e escape_char] [-F configfile]

[-i identity_file] [-L [bind_address:]port:host:hostport]

[-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]

[-R [bind_address:]port:host:hostport] [-S ctl_path]

[-w local_tun[:remote_tun]] [user@]hostname [command]

不难发现,ssh命令中并不能带密码。

如果不需要登录时,我们可以用这样的方式来执行:

String[] shell = new String[] { ” /bin/sh ” , ” -c ” , ” ssh root@192.168.1.5 ls -l ” } ;

Process p = Runtime.getRuntime().exec(shell);

但是事情往往并不是我们想象的如此简单,绝大部分的客户是不能允许他们的Linux中还存在一个不需要密码就能执行任何命令的帐户的。那么,在Java中就没有任何办法通过ssh登录来执行一些命令吗?

不慌,先来Google一下,从一些网上别人请教的代码的蛛丝蚂迹中,发现了JSch ( ) ,这东东还真是不错,来,我们先看看其官方的简介:

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.

这东东支持像telnet一样的ssh的session,SFTP,SCP等。

下面,就让我们来看一个执行ssh命令的通用方法:

public static String sshExecute(String host, String user, String pwd,

String command) {

String osName = System.getProperty(“os.name”);

// ps -ef|grep tomcat|grep -v grep|awk ‘{print $2}’

StringBuffer sb = new StringBuffer();

try {

JSch jsch = new JSch();

if (osName.toUpperCase().indexOf(“WINDOWS”) -1) {

jsch.setKnownHosts(“c:\\known_hosts”);

} else {

jsch.setKnownHosts(“/root/.ssh/known_hosts”);

}

Session session = jsch.getSession(user, host, 22);

session.setPassword(pwd);

session.connect();

Channel channel = session.openChannel(“exec”);

((ChannelExec) channel).setCommand(command);

InputStream in = channel.getInputStream();

channel.connect();

int nextChar;

while (true) {

while ((nextChar = in.read()) != -1) {

sb.append((char) nextChar);

}

if (channel.isClosed()) {

System.out.println(“exit-status: ”

+ channel.getExitStatus());

break;

}

try {

Thread.sleep(1000);

} catch (Exception ee) {

}

}

channel.disconnect();

session.disconnect();

} catch (Exception e) {

e.printStackTrace();

}

return sb.toString();

}

看看,是不是挺简单了。

别忘了,由于这是Pure Java program,还有一个优点就是,这样的程序不依赖于OS,可以直接在Windows或者其它OS上运行。

对了,执行这个需要RSA的Key文件,示例如下:

192.168.1.4 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAsoINy5sLnrzYCTKBh2UrsqHd62dnnimCZtvq8ojTYt7NcAjjtW2FqmFNO+5x/mTwyY+ssoP5SganxDYs3G016aPZDQdGVZMn/08IsB7QEIAXEVHtgGIGuLqsdMUBBIxV7KI6BK+OWVwv277tBOgqvPcgeEacviFZb2lZhWr8hvR2pTrPFBLr+UELejm/Nnf9qWDBjDj/d2o8+ReSwN8dzNJIiFyWdboyUCZfHhxNgiGANFx22gC4lM+Wk8gkASo/QYDvoUwLFrAJoMdsw0d4pn34bQ0mspaaWy4N0+zrNCPcl8D0Q1RrAjfYfOiZOSTnxabJ2DLijuq7UgFbn2ESMw==

附:产生此文件的简单方法:可以在Linux中用ssh命令登录一次,这样便在/root/.ssh(假如使用root用户登录到Linux)目录下生成known_hosts文件。

javassh命令的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java调用ssh、javassh命令的信息别忘了在本站进行查找喔。

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年4月1日 16:34:28
下一篇 2024年4月1日 16:46:06

相关推荐

  • 为linux命令做链接gcc,linux cp 链接文件

    linux系统中gcc的命令怎么用? 1、linux系统常用操作命令linux系统常用操作命令如下:ls:全拼list,功能是列出目录的内容及其内容属性信息。cd:全拼change directory,功能是从当前工作目录切换到指定的工作目录。cp:全拼copy,其功能为复制文件或目录。 2、linux系统常用操作命令如下:ls:全拼list,功能是列出目录…

    2024年5月23日
    4300
  • 用c语言写cd命令,c语言编译命令

    C语言,这个p保存的是字符串cd首地址还是字符串cd这个常量 1、字符串常量的地址是字符串保存在内存的一组地址。字符数组的首地址代表着该字符串第一个元素的地址。字符指针是指向字符类型的指针。 2、是个字符串常量,指向它的指针是const char*,所以这条语句其实是:char* p = (const char*)123431; 将一个const变量赋值给非…

    2024年5月23日
    4600
  • linux上传文件覆盖,linux文件覆盖命令

    linux怎样将文件覆盖到另一个文件 1、cp -f 强行复制文件或目录,不论目标文件或目录是否已存在。 2、linux系统使用cp命令即可将一个文件夹里面的文件复制到另外一个文件夹里面。这个命令相当于dos下面的copy命令,具体用法是:cp_r源文件目的文件,其中参数r是指连同源文件中的子目录一同拷贝。 3、Linux cp命令主要用于复制文件或目录,英…

    2024年5月23日
    3900
  • linux下id命令,linux中的id命令

    linux常用命令及用法 1、linux常用命令:pwd命令该命令的英文解释为printworkingdirectory(打印工作目录)。输入pwd命令,Linux会输出当前目录。cd命令cd命令用来改变所在目录。linux基本操作命令如下:查看内核版本:uname-a。 2、linux常用命令有pwd命令、cd命令、ls命令、cat命令、grep命令、to…

    2024年5月23日
    4700
  • linuxvi命令不能用,linuxvim命令无法使用

    在linux虚拟系统的新建终端里输入vim等说命令找不到是怎么回事,求具体… 1、linux系统自带的是vi编辑器,在使用vim还得安装redhat/debian/fedora用yum install vim命令,debian/ubutnu/ubuntukylin用sudo apt-get install vim,两种方法都得用root权限安装。…

    2024年5月23日
    4900
  • linux删除分区命令,linux删掉分区

    怎么删除linux分区 1、右击计算机、管理、磁盘管理、选择没有盘符名称的分区、右击,点击删除逻辑分区即可。 2、fdisk命令可以对磁盘分区进行维护,包括查询,增加,删除等功能 使用方法:fdisk /dev/xxxx 进入后,p命令显示当前分区表信息,其它操作可以通过帮助命令了解。 3、linux分区在这里面显示的应该是未分配空间,或者未知空间,记不太清…

    2024年5月23日
    3900
  • linux取文件最后两列,linux命令到文件最后一行

    Linux下如何在不解压的情况下快速获得100G的gz文件最后几行内容。 1、用命令 gzip -l 压缩文件 |awk {print $4} 可将压缩文件中的文件名一一列出。 2、直接读取 一个gz压缩文件的方法:直接创建了一个内容:asdfasdfasfd 的 txt文件并用gzip 压缩。读取:$ zcat txt.gz asdfasdfasfd。如果…

    2024年5月23日
    4800
  • c语言变量命令规则的简单介绍

    c语言程序中对变量的使用必须必须遵循什么原则?这样做的好处是什么… 变量的使用需遵循:先定义后使用的原则。这样做的好处:1 对于编译器处理更方便。2 不容易出错。3 程序更清晰。 变量要“先定义,后使用”,就是为了在内存的相应地址中开辟一个这个变量专用的空间,也是为了计算机在使用这个变量的时候可以方便地找到这个变量在内存中所在的位置,以便于下一步…

    2024年5月23日
    5000
  • linuxusleep命令,linux sleep 2

    在linux下,想用sleep函数实现延时五秒,应该怎么设参数? 1、sleep(参数)参数 时间:指定要暂停时间的长度。时间长度,后面可接 s、m、h 或 d,其中 s 为秒,m 为 分钟,h 为小时,d 为日数。 2、而如果在Linux下也用微妙为单位休眠,可以使用线程休眠函数:void usleep(unsigned long usec)。 3、在li…

    2024年5月23日
    4300
  • linux磁盘接口,linux磁盘相关命令

    IDE1接口主硬盘第一个逻辑分区在Linux系统怎么表示 1、使用数字编号为了表示不同的分区,通常会用数字进行编号,比如: 系统的第一块 IDE 接口硬盘的第 1 个分区称为 /dev/hda1。系统的第一块 IDE 接口硬盘的第 5 个分区称为 /dev/hda5。 2、第一个IDE第一分区叫做/dev/hda1,第一块IDE第五分区叫做/dev/hda5…

    2024年5月23日
    4700

发表回复

登录后才能评论



关注微信