转自:http://ilexes.blog.51cto.com/705330/531352
注:此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
(http://www.jcraft.com/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 AAAAB3NzaC1yc2EAAAABIwAAAQEAsoINy5sLnrzYCTKBh2UrsqHd62dnnim
CZtvq8ojTYt7NcAjjtW2FqmFNO+5x/mTwyY+ssoP5SganxDYs3G016aPZDQdGVZMn/08Is
B7QEIAXEVHtgGIGuLqsdMUBBIxV7KI6BK+OWVwv277tBOgqvPcgeEacviFZb2lZhWr8hv
R2pTrPFBLr+UELejm/Nnf9qWDBjDj/d2o8+ReSwN8dzNJIiFyWdboyUCZfHhxNgiGANFx22
gC4lM+Wk8gkASo/QYDvoUwLFrAJoMdsw0d4pn34bQ0mspaaWy4N0+zrNCPcl8D0Q1R
rAjfYfOiZOSTnxabJ2DLijuq7UgFbn2ESMw==
附:产生此文件的简单方法:可以在Linux中用ssh命令登录一次,这样便在/root/.ssh(假如使用root用户登录到Linux)目录下生成known_hosts文件。
分享到:
相关推荐
在Java编程中,有时我们需要实现一个功能,即通过代码远程登录Linux服务器并执行特定的Linux命令。这在自动化运维、远程脚本执行等场景中非常常见。本篇将详细讲解如何实现这一目标,并提供相关源码及jar包。 首先...
在Java开发中,有时我们需要远程连接到Linux服务器执行shell命令,比如进行系统管理、自动化运维或者数据处理等任务。...SSHXCUTE.jar简化了Java开发中的SSH操作,使得远程执行Linux命令变得更加便捷和安全。
以上就是使用Java执行本地CMD命令以及通过SSH连接远程Linux服务器执行shell命令的方法。这两个功能的结合,使开发者能够轻松地在不同的操作系统间进行跨平台的系统操作,极大地提高了开发和运维的效率。
总之,"Java Linux SSH登录"涉及到使用Java的JSch库与Linux系统进行安全的远程通信,执行特定的命令。提供的文件列表展示了实现这一功能的可能代码结构,包括自定义的SSH连接管理类、输入输出流处理、登录选项以及...
在IT行业中,Linux、Java、Web、SSH以及远程工具是至关重要的组成部分,它们构成了许多企业级应用的基础架构。下面将详细解析这些知识点及其相互关系。 首先,Linux是一种开源的操作系统,广泛应用于服务器环境,以...
sshxcute 就是这样一个框架工具集,它基于 JSCH 构建,允许工程师利用Java 代码通过 SSH 连接远程批量执行 Linux/UNIX 系统上的命令或者脚本,同时加入了判断成功与否,取回输出等多种实用功能。sshxcute 不管是针对...
本项目“java开发的swing客户端,远程执行linux命令”显然旨在利用Swing构建一个桌面应用,该应用的核心功能是远程控制Linux服务器,执行命令。这涉及到Java中的网络编程和Linux系统的交互。具体来说,开发者可能使用...
JSch 是一个纯 Java 实现的 SSH2 客户端,可以用来连接到 SSH 服务器,进行文件传输、命令执行等操作。下面是一个简单的 SSH 连接示例: ```java import com.jcraft.jsch.*; public class SSHConnection { public...
JSch是一个纯Java实现的SSH2库,它允许开发者连接到SSH服务器,执行命令,上传/下载文件,甚至建立端口转发。要使用JSch,首先需要将其添加到项目的依赖中。接下来,我们可以通过以下步骤执行远程Linux命令: 1. ...
此外,提到的"system shell"表明这个项目可能允许用户通过SSH执行Linux系统的shell命令。 **SSH与Java中的jcraft库** SSH协议在Java中通常通过第三方库实现,jcraft就是其中之一。jcraft提供了一个名为jcabi-ssh的...
在描述中提到的"java连接Linux系统远程调用"是指通过Java程序使用SSH2协议来连接到Linux服务器,执行命令或者管理文件系统。这种方式通常在自动化运维、脚本编程或者远程服务调用中非常有用。 下面我们将深入探讨...
- **Java SSH 安全访问代码**:该标题表明了这段代码主要实现了通过 Java 进行 SSH 安全访问的功能。 #### 描述解读: - **Java SSH 安全访问代码**:这部分代码提供了 Java 实现 SSH 访问的基础结构。 - **里面有...
通过监听特定的队列,当有新消息到达时,程序将被动地接收并解析这些消息,这些消息可能是执行Linux命令的指示。 其次,"expect4j"是一个Java库,它允许程序模拟用户交互,尤其是用于自动化SSH登录。SSH(Secure ...
ant运行scp以及sshexec任务所必须的jar包,这是optional的,所以ant默认不会有的,需要自己加上
通过 SSH2 库,可以实现在 Java 中远程向 Linux 发送并执行命令。具体步骤包括: - 创建 `Connection` 对象,并通过指定的 IP 地址和端口号进行连接。 - 创建 `Session` 对象,用于执行远程命令。 - 使用 `Session` ...
一旦连接建立成功,我们可以使用`session`对象的`execCommand()`方法执行Linux命令,比如`cp`或`rsync`进行文件拷贝。例如: ```java Channel channel = session.openChannel("exec"); ((ChannelExec) channel)....
`JSch`库提供了一个这样的解决方案,它是一个纯Java实现的SSH2库,允许开发者连接到远程计算机并执行命令,传输文件等。本篇将详细介绍如何使用Java和JSch在Windows上实现对Linux服务器的文件获取。 首先,我们需要...
SSH,全称为Secure Shell,旨在提供加密的网络服务,特别适用于管理服务器、执行命令、传输文件等场景。在开发工程中,SSH扮演着至关重要的角色,因为它提供了便捷且安全的远程访问方式。 SSH的工作原理是通过公钥...
除了 SCP 和 SFTP,Java 还可以通过 `Runtime.getRuntime().exec()` 方法执行 shell 命令,实现对 Linux 系统的更广泛操作。例如,启动、停止进程,查看文件系统信息,或者进行系统级别的监控。但这种方法需要注意的...
JSch是一个纯Java实现的SSH2库,允许开发者执行命令、文件传输、端口转发等功能。通过JSch,我们能模拟客户端的行为,与SSH服务器建立连接,进行权限验证和资源访问。 权限分配的核心在于设置适当的策略。在SSH...