一、所需jar包

需要借助Ganymed SSH的jar包:  ganymed-ssh2-build210.jar

二、实现原理

Ganymed SSH-2 java在整个访问过程中担当SSH的客户端,由于Linux系统自带SSH服务,所以可以直接访问Linux系统并执行相关命令,而 Windows系统则需要首先安装SSH服务。

三、Win下SSH服务的安装配置

当远程服务器为Windows系统时, 需要在远程服务器中安装Windows版的SSH服务,比如:freesshd。

1.安装完freesshd后,首选在[Users]下添加用来远程连接的win系统用户,此处采用密码认证的方式,允许使用shell:

2.然后再在【Authentication】下设置允许密码认证方式:

3.到[Server status]下查看SSH服务器状态,确保启动即可。最后点击【确定】即可。

四、java代码实现远程连接服务器并执行命令

/*

* To change this license header, choose License Headers in Project Properties.

* To change this template file, choose Tools | Templates

* and open the template in the editor.

*/

package test;

import java.io.IOException;

import ch.ethz.ssh2.Connection;

import ch.ethz.ssh2.Session;

import ch.ethz.ssh2.StreamGobbler;

import java.io.BufferedReader;

import java.io.InputStream;

import java.io.InputStreamReader;

/*

@author: Liu Yuanyuan

purpose: test connecting remote computer and execute linux command

*/

public class TestRemoteConnect

{

public static void main(String[] args)

{

String hostname = "192.168.100.50";

int port = 22;//22 usually the default port

String username = "root";

String password = "highgo";

//指明连接主机的IP地址

Connection conn = new Connection(hostname,port);

Session ssh = null;

try

{

//连接到主机

conn.connect();

//使用用户名和密码校验

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

if (!isconn)

{

System.out.println("用户名称或者是密码不正确");

}

else

{

System.out.println("已经连接OK");

//以下是linux的示例

//将本地conf/server_start.sh传输到远程主机的/opt/pg944/目录下

SCPClient clt = conn.createSCPClient();

clt.put("conf/server_start.sh", "/opt/pg944/");

//执行命令

ssh = conn.openSession();

ssh.execCommand("sh /root/hello.sh");

//ssh.execCommand("perl /root/hello.pl");

//只允许使用一行命令,即ssh对象只能使用一次execCommand这个方法,多次使用则会出现异常.

//使用多个命令用分号隔开

//ssh.execCommand("cd /root; sh hello.sh");

/* 执行windows系统命令的示例

Session sess = conn.openSession();

sess.execCommand("ipconfig");

*/

//将Terminal屏幕上的文字全部打印出来

InputStream is = new StreamGobbler(ssh.getStdout());

BufferedReader brs = new BufferedReader(new InputStreamReader(is));

while (true)

{

String line = brs.readLine();

if (line == null)

{

break;

}

System.out.println(line);

}

}

}

catch (IOException e)

{

System.out.println(e.getMessage());

e.printStackTrace();

}

finally

{

//连接的Session和Connection对象都需要关闭

if(ssh!=null)

{

ssh.close();

}

if(conn!=null)

{

conn.close();

}

}

}

}

五、其他的实现方式:

java 远程连接_java实现连接远程服务器并执行命令的基本原理相关推荐

  1. java 连接远程服务器_java实现连接远程服务器并执行命令的基本原理

    一.所需jar包 需要借助Ganymed SSH的jar包:  ganymed-ssh2-build210.jar 二.实现原理 Ganymed SSH-2 java在整个访问过程中担当SSH的客户端 ...

  2. java远程执行功能_Java远程连接Linux服务器并执行命令及上传文件功能

    Java远程连接Linux服务器并执行命令及上传文件功能 发布于 2020-3-6| 复制链接 摘记:  最近再开发中遇到需要将文件上传到Linux服务器上,至此整理代码笔记.此种连接方法中有考虑到并 ...

  3. Linux中的Shell用SSH自动登录远程服务器后执行命令并自动退出

    目录 [隐藏] 1 SSH命令格式 2 主要参数说明 3 ssh控制远程主机,远程执行命令步骤 4 准备工作 5 基于公私钥认证远程登录可能存在的不足 6 ssh 执行远程命令格式 6.1 打开远程s ...

  4. 【Java】Java编写Telnet客户端,连接到Windows的Telnet服务器,执行命令和批处理脚本

    Java编写Telnet客户端,连接到Windows的Telnet服务器,执行命令和批处理脚本,同时解决了中文乱码的问题. 源代码和Jar包在这里下载:http://download.csdn.net ...

  5. 我写了一个脚本,可在“任意”服务器上执行命令!

    冰河之前维护着上千台服务器组成的服务器集群,如果每次需要在服务器上执行命令的时候,都要手动登录每台服务器进行操作的话,那也太麻烦了.你想想,如果在上千台服务器的集群中,每台服务器中只需要简单的执行一个 ...

  6. 什么鬼?我能通过依赖混淆攻击在 Halo 游戏服务器中执行命令,微软不 care?!...

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士 研究员可以利用依赖混淆攻击在 Halo Microsoft 服务器中执行命令,但微软安全响应中心 (MSRC) 表示并非问题. 神秘依赖关 ...

  7. Pssh -- 使用单个终端在多个远程Linux服务器上执行命令

    OpenSSH毫无疑问是可用于Linux的使用最广泛和强大工具之一,它允许你通过一个shell安全地连接到远程Linux系统,并且允许你与远程系统之间来回传输文件. 但OpenSSH的最大缺点是你不同 ...

  8. python ssh远程连接服务器并执行命令或相关操作

    import paramikoclass SSHConnection:# 初始化连接创建Transport通道def __init__(self, host='127.0.0.1', port=22, ...

  9. java spring 服务器关闭连接_java springboot websocket 服务 服务器主动关闭连接 导致 抛出java.io.EOFException异常...

    遇到这个问题不要慌,去查查众说纷纭.那我就在这里总结一下吧 存在此问题的有以下几种情况 1.ws连接不稳定经常断线: 答: 1)可能是客户和服务器之间的网络问题 2)可能是服务端内存不够用导致线程被异 ...

最新文章

  1. 查看linux上面是否有安装redis,redis启动
  2. 【开发环境】Mac 中删除 Python ( 删除 Python 框架 | 删除 Python 应用程序 | 删除 Python 链接 )
  3. 从三个数组中选择满足条件的三个数
  4. C++堆排序(附完整源码)
  5. 15行代码AC——Link/Cut Tree CodeForces - 614A(爆long long处理+快速幂讲解)
  6. sts java配置tomcat_STS配置Tomcat.9.0
  7. sql 查询优化小计
  8. python Linux系统信息
  9. springboot连接数据库报错testWhileIdle is true, validationQuery not set
  10. Docke--利用 commit 理解构建镜像
  11. Java教程:Java continue语句详解
  12. 解决Linux里面未启用网卡的问题
  13. 原生Servlet 上传文件
  14. iOS开发之MAC的内存清理,Xcode清理
  15. 容器技术Docker K8s 52 边缘容器服务(ACK@Edge)-边缘计算和边缘容器
  16. Webstorm—Webstorm汉化(图文详解)
  17. 直播预约 | 如何通过MLOps解放和提升AI生产力?
  18. java 获取 yyyymmdd_从JS日期对象获取YYYYMMDD格式的字符串?
  19. Chef入门详解 Chef安装 Chef使用
  20. Win11环境 jdk1.8安装及配置详细教程

热门文章

  1. 零基础入门深度学习(2) - 线性单元和梯度下降
  2. 安卓图片处理全解:获取视频的缩略图
  3. js系列教程10-canvas绘图全解
  4. 目标检测性能评价指标mAP、Precision、Recall、IoU
  5. Quartus17打开RTL视图
  6. 五分钟快速过完Verilog HDL基本概念(5)数据类型
  7. python创建字典
  8. python使用小记2-csv文件处理
  9. C#用域账号登陆,访问网络路径
  10. HTML+CSS 整站 步骤