这个需要安装库:

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​