java ssh jsch_Java使用jsch远程连接ssh
概念:JSch是SSH2的纯Java实现。JSch允许连接到sshd服务器并使用端口转发,X11转发,文件传输等,并且可以将其功能集成到您自己的Java程序中。
说白了就是以java的方式通过jsch连接,来对服务器进行操作。
maven地址:
com.jcraft
jsch
0.1.55
1.以shell交互式的命令操作
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.UserInfo;
/**
* @Description todo
* @Author Administrator
* @Date 2019/11/15 9:59
**/
public class TestSqoop {
private static final String USER="root";
private static final String PASSWORD="";
private static final String HOST="";
private static final int DEFAULT_SSH_PORT=22;
public static void main(String[] arg){
try{
JSch jsch=new JSch();
Session session = jsch.getSession(USER,HOST,DEFAULT_SSH_PORT);
session.setPassword(PASSWORD);
UserInfo userInfo = new UserInfo() {
public String getPassphrase() {
System.out.println("getPassphrase");
return null;
}
public String getPassword() {
System.out.println("getPassword");
return null;
}
public boolean promptPassword(String s) {
System.out.println("promptPassword:"+s);
return false;
}
public boolean promptPassphrase(String s) {
System.out.println("promptPassphrase:"+s);
return false;
}
public boolean promptYesNo(String s) {
System.out.println("promptYesNo:"+s);
return true;//notice here!
}
public void showMessage(String s) {
System.out.println("showMessage:"+s);
}
};
session.setUserInfo(userInfo);
session.connect(30000); // making a connection with timeout.
Channel channel=session.openChannel("shell");
channel.setInputStream(System.in);
channel.setOutputStream(System.out);
//channel.connect();
channel.connect(3*1000);
}
catch(Exception e){
System.out.println(e);
}
}
}
2.以脚本文件的形式,实现的是一个sqoop抽取数据转到hive的作用
import com.jcraft.jsch.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Vector;
/**
* @Description todo
* @Author Administrator
* @Date 2019/11/15 11:12
**/
public class TestSqoop2 {
private String ipAddress;
private String username;
private String password;
public static final int DEFAULT_SSH_PORT = 22;
private Vector stdout;
public TestSqoop2(final String ipAddress, final String username, final String password) {
this.ipAddress = ipAddress;
this.username = username;
this.password = password;
stdout = new Vector();
}
public int execute(final String command) {
int returnCode = 0;
JSch jsch = new JSch();
MyUserInfo userInfo = new MyUserInfo();
try {
// Create and connect session.
Session session = jsch.getSession(username, ipAddress, DEFAULT_SSH_PORT);
session.setPassword(password);
session.setUserInfo(userInfo);
session.connect();
// Create and connect channel.
Channel channel = session.openChannel("exec");
((ChannelExec) channel).setCommand(command);
channel.setInputStream(null);
BufferedReader input = new BufferedReader(new InputStreamReader(channel
.getInputStream()));
channel.connect();
System.out.println("The remote command is: " + command);
// Get the output of remote command.
String line;
while ((line = input.readLine()) != null) {
stdout.add(line);
}
input.close();
// Get the return code only after the channel is closed.
if (channel.isClosed()) {
returnCode = channel.getExitStatus();
}
// Disconnect the channel and session.
channel.disconnect();
session.disconnect();
} catch (JSchException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return returnCode;
}
public Vector getStandardOutput() {
return stdout;
}
public static void main(final String [] args) {
TestSqoop2 sshExecutor = new TestSqoop2("", "root", "");
sshExecutor.execute("sudo -u hdfs \\\n" +
"sqoop import \\\n" +
"--connect 'jdbc:sqlserver://192.168.0.20:1433;username=SA;password=;database=test' \\\n" +
"--hive-import \\\n" +
"--hive-database default \\\n" +
"--hive-table k \\\n" +
"--query 'select x1.name,x1.score,x2.subject from x1 left join x2 on x1.tid=x2.id and $CONDITIONS' \\\n" +
"--target-dir /usr/3 \\\n" +
"-m 1");
Vector stdout = sshExecutor.getStandardOutput();
for (String str : stdout) {
System.out.println(str);
}
}
}
自定义的userInfo类
import com.jcraft.jsch.UserInfo;
/**
* @Description todo
* @Author Administrator
* @Date 2019/11/15 11:35
**/
public class MyUserInfo implements UserInfo {
private String password;
private String passphrase;
public String getPassphrase() {
System.out.println("MyUserInfo.getPassphrase()");
return null;
}
public String getPassword() {
System.out.println("MyUserInfo.getPassword()");
return null;
}
public boolean promptPassphrase(final String arg0) {
System.out.println("MyUserInfo.promptPassphrase()");
System.out.println(arg0);
return false;
}
public boolean promptPassword(final String arg0) {
System.out.println("MyUserInfo.promptPassword()");
System.out.println(arg0);
return false;
}
public boolean promptYesNo(final String arg0) {
System.out.println("MyUserInfo.promptYesNo()");
System.out.println(arg0);
if (arg0.contains("The authenticity of host")) {
return true;
}
return false;
}
public void showMessage(final String arg0) {
System.out.println("MyUserInfo.showMessage()");
}
}
java ssh jsch_Java使用jsch远程连接ssh相关推荐
- linux ssh服务,Linux配置SSH服务以便实现远程连接
Linux用户们一定想要知道该怎么开启SSH服务吧,SSH服务是Linux系统远程连接的重要方式,所以如何配置SHH服务也让很多用户感到纠结.现在小编就帮大家解决这个问题. 配置方法: 查询\安装SS ...
- 使用SSH方式实现Git远程连接GitHub
git是目前世界上最先进的分布式版本控制系统,相比于SVN,分布式版本系统的最大好处之一是在本地工作完全不需要考虑远程库的存在,也就是有没有联网都可以正常工作!当有网络的时候,再把本地提交推送一下就完 ...
- 虚拟机的安装和linux操作系统(RedHat.8.5)的安装。将虚拟机的网络连接模式分别调换成仅主机模式,nat模式,桥接模式并获取ip地址使用ssh通过不同用户远程连接。在linux系统下破解密码
目录 一.在VMware上如何创建虚拟机以及安装linux操作系统. 二.修改主机名为server.local. 三.将虚拟机的网络连接模式分别调换成仅主机模式,nat模式,桥接模式并获取ip地址使用 ...
- linux服务器怎么开启远程,Linux配置SSH服务以便实现远程连接
Linux用户们一定想要知道该怎么开启SSH服务吧,SSH服务是Linux系统远程连接的重要方式,所以如何配置SHH服务也让很多用户感到纠结.现在小编就帮大家解决这个问题. 配置方法: 查询\安装SS ...
- java远程连接ssh的实现
在开发或者测试的过程中,经常会登录到远程服务器上进行一系列操作(如目录跳转.脚本执行等):这些动作固定,但是每次重复操作会显得较为繁琐.基于此,开发出一个自动化脚本用以代替手工执行很有必要. 这里给大 ...
- ssh 连接_怎样解决Linux环境下远程连接ssh速度慢的问题
哈喽各位爱学习的小伙伴们,我最近遇到了一个ssh远程慢的问题,输入ssh后,需要等10+s才会出现密码验证的页面,通过 ssh ip -vv 查看,连接慢速的节点是DNS解析的过程,/etc/reso ...
- 第五十四篇 Linux相关——远程连接SSH
No.1. SSH(Secure Shell)安全外壳协议 建立在应用层基础上的安全协议 可靠,专为远程登录会话和其他网络服务提供安全性的协议 有效防止远程管理过程中的信息泄漏问题 SSH客户端适用于 ...
- mac 无法打开22端口 无法远程连接ssh 的解决办法
mac 无法远程连接 原因是22端口没有打开 尝试通过命令行打开22端口 依然失败!! 解决办法:手动设置 ①打开系统偏好设置-共享 ②勾选远程登录并添加用户 现在再试一下远程ssh ,已经可以成功连 ...
- linux远程连接ssh服务和http的深入介绍
1.实现免密登录 要实现免密登录,我们首先需要创建一对密钥,然后将公共密钥上传到目标服务器的指定文件 1>首先我们需要创建密钥 使用 ssh-keygen 命令可以创建于身份验证的私钥与公钥,默 ...
最新文章
- cmd查看所有数据库 db2_DB2数据库常用命令集
- 半吊子菜鸟学Web开发 -- PHP学习 4 --异常
- su: cannot set user id: Resource temporarily unavailable
- java 方法中定义类_在Java方法中使用类定义
- 使用多窗体时, 关于节约内存和加快启动速度的思考与尝试
- 曲线绕x轴旋转曲面方程_空间曲线绕空间直线旋转生成的旋转曲面方程
- pandas 保存数据到excel,csv
- 文本备份云仓库-python实用脚本下载
- php7.2 session,PHP 7.2 Warning: “Cannot change session name when session is active”
- 程序化导入导出EXCEL数据,完全由模板输出
- maven命令行打包
- es浏览器连接电脑找不到服务器,es文件浏览器,详细教您es文件浏览器怎么连接电脑...
- android4.4.3版本root,碉堡了!ROOT精灵支持Nexus 5等Android4.4.3机型ROOT
- ASO优化:如何提炼ASO关键词词库
- 前后端通信:WebSocket之实时监控
- psu 计算机 排名,PSU研究生计算机科学排名,真慎重来考察
- 如何解决网站首页老是被篡改经常反复被篡改
- java html模板隐情mini,HTML A标签简单问题
- Spring--官方文档部分翻译(第五章 面向Aspect的编程-AOP)
- navigationController中navigationBar 的设置
热门文章
- ChatGPT写新闻-ChatGPT写文章
- sugarnms智和EPON网管系统
- 汉源高科工业级光纤收发器百兆1光4电钉轨式IP网络光电转换器
- 优采云自动文章采集器到底怎么样?怎么做?
- iPhone/iPad/Android UI尺寸规范 UI尺寸规范,UI图标尺寸,UI界面尺寸,iPhone6尺寸,iPhone6 Plus尺寸,安卓尺寸,iOS尺寸...
- 【线性代数的本质|笔记】从线性变换的角度看向量的点积和叉积
- Vue3学习笔记(三)——计算/监听/样式/自定义指令
- 王道考研机试指南第2版——题目提交链接
- ntoskrnl.exe原因造成的 蓝屏
- linux机器中毒,Centos系统中毒(sfewfesfs)处理过程记录