scala用ssh2连接Linux
这个需要安装库:
import ch.ethz.ssh2.{Connection, Session, StreamGobbler}
首先用 ip 和 post 创建连接:
val conn: Connection = new Connection(ipAddr, post)
判断这个连接是否连接上了,这个用了一个 Boolean 类型判断:
def login(): Boolean = {
conn.connect()
// 连接
val ret: Boolean = conn.authenticateWithPassword(userName, password)
ret
}
如果连接成功的话,那么就将命令发送过去,命令发送只需要建立一个会话即可,执行命令返回的值保存在 in 中:
val session = conn.openSession()
session.execCommand(cmds)
val in = session.getStdout
最后就是处理解析 in 中的返回结果就行了:
val is = new StreamGobbler(in)
val brs: BufferedReader = new BufferedReader(new InputStreamReader(is))
val line = brs.lines().toArray().toList.mkString(",")
完整的类封装成:
class RemoteShellTool(ipAddr: String, post: Int, userName: String, password: String) {
val conn: Connection = new Connection(ipAddr, post)
//判断是否连接上了
def login(): Boolean = {
conn.connect()
// 连接
val ret: Boolean = conn.authenticateWithPassword(userName, password)
ret
}
//发送命令过去
def exec(cmds: String): String = {
var result: String = ""
try {
val str_ret: Boolean = login()
if (str_ret) {
// 打开一个会话
val session = conn.openSession()
session.execCommand(cmds)
val in = session.getStdout
result = processStdout(in)
} else {
println("连接失败")
}
} catch {
case e: IOException => {
e.printStackTrace()
}
} finally {
conn.close()
}
result
}
//处理返回结果
def processStdout(in: InputStream): String = {
val is = new StreamGobbler(in)
val brs: BufferedReader = new BufferedReader(new InputStreamReader(is))
val line = brs.lines().toArray().toList.mkString(",")
line
}
在 main 函数中调用这个类即可:
def main(args: Array[String]): Unit = {
//读取配置文件
val filePath = System.getProperty("user.dir")
val properties: Properties = new Properties()
val ipstream = new BufferedInputStream(new FileInputStream(filePath + "/conf/configssh.properties"))
properties.load(ipstream)
val ip = "ip"
val post = "post".toInt
val userName = "userName"
val password = password"
val cmd = "cmd"
val rms = new RemoteShellTool(ip, post, userName, password)
val result = rms.exec(cmd)
println(result)
}
这个方法能发送的 cmd 有点少,比如能识别 date 、 ls 等,但是不能识别 history 、 ll
scala用ssh2连接Linux的更多相关文章
- 第2章 Linux系统安装(3)_SSH连接Linux工具:SecureCRT和WinSCP
4. SSH连接Linux工具 4.1 Linux网卡配置 (1)临时配置: ifconfig eth0 192.168.32.100 //给eth0网卡指定IP,写在ROM里的,关机会丢失. (2) ...
- putty连接linux as5 输入密码后连接中断
putty连接linux as5 输入密码后连接中断 1.修改putty首页的设置,选择“close session on exit” 为 “never”,之后发现输入密码后,“session clo ...
- windows上使用SecureCRT连接linux
前言: SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序,简单地说是Windows下登录UNIX或Linux服务器主机的软件.这样操作的时候不必进入到linux桌面,可以更方便的 ...
- java使用SSH连接Linux系统
SSH连接linux系统使我们在开发项目中常用到的,现在留下来,做个记录 package com.log; import java.io.BufferedReader; import java.io. ...
- SecureCRT连接linux步骤
SecureCRT连接linux步骤 做个笔记,以免隔段时间后忘了 LINUX系统一般都是用来作服务器使用,而且都是通过命令行来操作,为了操作方便我们都会使用第三方软件来远程操作.CRT就是比较常用 ...
- 用Putty连接Linux
随着linux应用的普及,linux管理越来越依赖远程管理.在各种telnet类工具中,putty是其中最出色的一个. 一.Putty简介 Putty是一个免费小巧的Win32平台下的teln ...
- Python (paramiko) 连接Linux服务器
目录 参考资料 Paramiko 安装 连接Linux 文件上传/下载 文件封装 其他 参考资料 https://www.liujiangblog.com/blog/15/ https://blog. ...
- Windows远程连接Linux
目录 xrdp方式 vnc方式 xrdp方式 ----------------------------------------------------------------------------- ...
- 1、linux网络服务实验 用PuTTY连接Linux
这个是大三下学期的Linux网络服务配置详解时,感觉老师上得简单,就整理下,岭南师范学院师弟妹有福,如果是蔡老师交的话,可以拿来预习,复习. 一.用PuTTY连接Linux ①.装有redhat系统的 ...
随机推荐
- django自制后台左侧导航代码
自定义一个sort.py页面: 写入一下代码: class lanmusort(object): def __init__(self): self.arr=[] def lanmuget(self,o ...
- apache设置跨域请求
<VirtualHost *:8888> DocumentRoot D:/xampp/htdocs/bss/ ServerName ims.drcloud.cn ErrorLog &quo ...
- APM(pixhawk)飞控疑难杂症解决方法汇总(持续更新)
本文转自下面博主 https://blog.csdn.net/junzixing/article/details/79310159 APM/Pixhawk常用链接汇总(持续更新) https://bl ...
- APM和PIX飞控日志分析入门贴
我们在飞行中,经常会碰到各种各样的问题,经常有模友很纳闷,为什么我的飞机会这样那样的问题,为什么我的飞机会炸机,各种问题得不到答案是一件非常不爽的问题,在APM和PIX飞控中,都有记录我们整个飞行过程 ...
- 性能之ab简单使用
ab是apache自带的性能测试工具,他所有关注的请求返回的状态码(2XX),不关心后续处理过程,所以测试时间很小,严重依赖CPU颗粒数 一.进入ab存放的目录执行./ab.其中/ab [option ...
- node03
1.express处理post请求 借助body-parse中间件,其实最终我们也不会使用这个 对于get请求,无需中间件,用req.query即可返回相应的数据 但是post我们尝试借助中间件处理 ...
- java课程课后作业190425之一维数组最大子数组(界面实现)
题目要求: 1.在第一个问题过程中,我在以前的代码中好像已经写出了这个功能,想要实现这个功能,我们只需要在我们储存的数组和是负数的时候对中转值进行重新赋值就可以得到新的数值的起始位置,而他的终了位置就 ...
- insert
(1)INSERT INTO SELECT语句 语句形式为: Insert into Table2(field1,field2,,field3,...) select key1,key2,,key3, ...
- 使用datagrip链接mysql数据库的报错问题.
1. datagrip刚打开时候,选择风格是白是黑后, 会有一个选择什么数据库,有oracle...一大堆,别选错了.我的是mysql,不要选成了windows sql 和sql. 2 基本设置写完, ...
- Python函数式编程之闭包
-------------------------函数式编程之*******闭包------------------------ Note: 一:简介 函数式编程不是程序必须要的,但是对于简化程序有很 ...