• scala用ssh2连接Linux


    这个需要安装库:

    import ch.ethz.ssh2.{Connection, Session, StreamGobbler}
    

    首先用 ippost 创建连接:

    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 有点少,比如能识别 datels 等,但是不能识别 historyll

  • 相关阅读:
    View Programming Guide for iOS ---- iOS 视图编程指南(四)---Views
    Java设计模式---原型模式(Prototype)
    Java设计模式----建造者模式(Builder)
    Java设计模式----单例模式(Singleton)
    Java设计模式---工厂方法模式(Factory-Method)
    Hibernate之基于外键映射的一对一(1-1)关联关系
    Hibernate关联关系之双向1—n
    修改Map中确定key对应的value问题
    Hibernate关联关系之——单向n-1
    Hibernate之Session对象的相关方法以及持久化对象的状态
  • 原文地址:https://www.cnblogs.com/TTyb/p/6891409.html
Copyright © 2020-2023  润新知