1、使用java代码通过ssh登陆linux并执行命令,正常情况下sshd服务都会有,知道用户密码就可以使用这种方式了。2、要在远程linux服务器上执行命令,可以在linux服务器上启动一个服务做执行脚本的代理,不断接受来自你这个项目发来的脚本信息,然后执行,再把结果返回给你项目中去。第一种:以消息队列的方式发送这些脚本信息,linux代理不断接受,并返回结果。项目同时要不断接受结果。第二种:项目中产生的脚本,直接记录到数据库,linux上的代理访问这个数据库,获取脚本信息,并将执行结果写入数据库。项目中轮询执行结果。上面我说的消息队列可以采用activemq,或者rabbitmq这些。命令执行,java中直接Runtime.getRuntime().exec(command)就行了。
你可以使用JSch
JSch全称是“Java Secure Channel”
是SSH2的一个纯Java实现。它允许你连接到一个sshd 服务器,使用端口转发,X11转发,文件传输等等。同时也是支持执行命令;
以下是大概运行的代码,只是提供大致思路,可以去查官方API和demo
import com.jcraft.jsch.ChannelExecimport com.jcraft.jsch.ChannelSftp
import com.jcraft.jsch.ChannelSftp.LsEntry
import com.jcraft.jsch.JSch
import com.jcraft.jsch.JSchException
import com.jcraft.jsch.Session
import com.jcraft.jsch.SftpATTRS
import com.jcraft.jsch.SftpException
.......
try{
Session session = new JSch().getSession(user, ip, port)
session.setPassword(pwd)
session.setConfig("StrictHostKeyChecking", "no")
session.setConfig("userauth.gssapi-with-mic", "no")
session.connect()
ChannelExec exec = (ChannelExec) session.openChannel("exec")
exec.setCommand("ifconfig")//这里是你要执行的命令,部分命令不支持,具体自己执行下
ByteArrayOutputStream bao = new ByteArrayOutputStream()
exec.setOutputStream(bao)
ByteArrayOutputStream baerr = new ByteArrayOutputStream()
exec.setErrStream(baerr)
exec.connect()
while (!exec.isEOF())
String errmsg = new String(baerr.toByteArray(), "utf-8")
if (StringUtils.notNull(errmsg)) {
throw new RuntimeException(errmsg)
} else {
System.out.println(new String(bao.toByteArray(), "utf-8"))
}
}catch(Exception e){
e.printStackTrace()
}finally{
//关闭session等操作
}
若想要在没有启动java远程调用的情况下,测试类能够正常运行,可以通过对测试类进行模拟测试来实现。模拟测试是通过编写测试代码来模拟应用程序的运行情况,以确保输入和输出符合预期,从而减少正确性错误