前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >scala用ssh2连接Linux

scala用ssh2连接Linux

作者头像
机器学习和大数据挖掘
发布2019-07-02 09:17:36
4.4K0
发布2019-07-02 09:17:36
举报
文章被收录于专栏:数据挖掘数据挖掘

这个需要安装库:

代码语言:javascript
复制
import ch.ethz.ssh2.{Connection, Session, StreamGobbler}

首先用 ippost 创建连接:

代码语言:javascript
复制
val conn: Connection = new Connection(ipAddr, post)

判断这个连接是否连接上了,这个用了一个 Boolean 类型判断:

代码语言:javascript
复制
def login(): Boolean = {
    conn.connect()
    // 连接
    val ret: Boolean = conn.authenticateWithPassword(userName, password)
    ret
  }

如果连接成功的话,那么就将命令发送过去,命令发送只需要建立一个会话即可,执行命令返回的值保存在 in 中:

代码语言:javascript
复制
val session = conn.openSession()
session.execCommand(cmds)
val in = session.getStdout

最后就是处理解析 in 中的返回结果就行了:

代码语言:javascript
复制
val is = new StreamGobbler(in)
val brs: BufferedReader = new BufferedReader(new InputStreamReader(is))
val line = brs.lines().toArray().toList.mkString(",")

完整的类封装成:

代码语言:javascript
复制
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 函数中调用这个类即可:

代码语言:javascript
复制
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 有点少,比如能识别 datels 等,但是不能识别 historyll

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-05-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档