java 远程连接_java实现连接远程服务器并执行命令的基本原理
一、所需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实现连接远程服务器并执行命令的基本原理相关推荐
- java 连接远程服务器_java实现连接远程服务器并执行命令的基本原理
一.所需jar包 需要借助Ganymed SSH的jar包: ganymed-ssh2-build210.jar 二.实现原理 Ganymed SSH-2 java在整个访问过程中担当SSH的客户端 ...
- java远程执行功能_Java远程连接Linux服务器并执行命令及上传文件功能
Java远程连接Linux服务器并执行命令及上传文件功能 发布于 2020-3-6| 复制链接 摘记: 最近再开发中遇到需要将文件上传到Linux服务器上,至此整理代码笔记.此种连接方法中有考虑到并 ...
- Linux中的Shell用SSH自动登录远程服务器后执行命令并自动退出
目录 [隐藏] 1 SSH命令格式 2 主要参数说明 3 ssh控制远程主机,远程执行命令步骤 4 准备工作 5 基于公私钥认证远程登录可能存在的不足 6 ssh 执行远程命令格式 6.1 打开远程s ...
- 【Java】Java编写Telnet客户端,连接到Windows的Telnet服务器,执行命令和批处理脚本
Java编写Telnet客户端,连接到Windows的Telnet服务器,执行命令和批处理脚本,同时解决了中文乱码的问题. 源代码和Jar包在这里下载:http://download.csdn.net ...
- 我写了一个脚本,可在“任意”服务器上执行命令!
冰河之前维护着上千台服务器组成的服务器集群,如果每次需要在服务器上执行命令的时候,都要手动登录每台服务器进行操作的话,那也太麻烦了.你想想,如果在上千台服务器的集群中,每台服务器中只需要简单的执行一个 ...
- 什么鬼?我能通过依赖混淆攻击在 Halo 游戏服务器中执行命令,微软不 care?!...
聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士 研究员可以利用依赖混淆攻击在 Halo Microsoft 服务器中执行命令,但微软安全响应中心 (MSRC) 表示并非问题. 神秘依赖关 ...
- Pssh -- 使用单个终端在多个远程Linux服务器上执行命令
OpenSSH毫无疑问是可用于Linux的使用最广泛和强大工具之一,它允许你通过一个shell安全地连接到远程Linux系统,并且允许你与远程系统之间来回传输文件. 但OpenSSH的最大缺点是你不同 ...
- python ssh远程连接服务器并执行命令或相关操作
import paramikoclass SSHConnection:# 初始化连接创建Transport通道def __init__(self, host='127.0.0.1', port=22, ...
- java spring 服务器关闭连接_java springboot websocket 服务 服务器主动关闭连接 导致 抛出java.io.EOFException异常...
遇到这个问题不要慌,去查查众说纷纭.那我就在这里总结一下吧 存在此问题的有以下几种情况 1.ws连接不稳定经常断线: 答: 1)可能是客户和服务器之间的网络问题 2)可能是服务端内存不够用导致线程被异 ...
最新文章
- 查看linux上面是否有安装redis,redis启动
- 【开发环境】Mac 中删除 Python ( 删除 Python 框架 | 删除 Python 应用程序 | 删除 Python 链接 )
- 从三个数组中选择满足条件的三个数
- C++堆排序(附完整源码)
- 15行代码AC——Link/Cut Tree CodeForces - 614A(爆long long处理+快速幂讲解)
- sts java配置tomcat_STS配置Tomcat.9.0
- sql 查询优化小计
- python Linux系统信息
- springboot连接数据库报错testWhileIdle is true, validationQuery not set
- Docke--利用 commit 理解构建镜像
- Java教程:Java continue语句详解
- 解决Linux里面未启用网卡的问题
- 原生Servlet 上传文件
- iOS开发之MAC的内存清理,Xcode清理
- 容器技术Docker K8s 52 边缘容器服务(ACK@Edge)-边缘计算和边缘容器
- Webstorm—Webstorm汉化(图文详解)
- 直播预约 | 如何通过MLOps解放和提升AI生产力?
- java 获取 yyyymmdd_从JS日期对象获取YYYYMMDD格式的字符串?
- Chef入门详解 Chef安装 Chef使用
- Win11环境 jdk1.8安装及配置详细教程