如何在scala中通过sftp读取文件

How to read a file via sftp in scala

我正在寻找一种在 Scala 中通过 sftp 协议读取文件(可能还有目录)的简单方法。

我的尝试:

我正在寻找使用库和 sftp 而不是普通 scp 的实际工作代码,这是我被迫做的。我发现网上这方面的例子不多,而且我找到的例子要复杂得多。

这是一个使用 sshj 的工作示例:

import net.schmizz.sshj.SSHClient
import net.schmizz.sshj.sftp.SFTPClient

object Main extends App {
  val hostname = "myServerName"
  val username = "myUserName"
  val password = "thePassword"
  val destinationFile = "C:/Temp/Test.txt"
  val sourceFile = "./Test.txt"

  val ssh = new SSHClient()
  ssh.addHostKeyVerifier("xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx")
  ssh.connect(hostname)
  ssh.authPassword(username, password)
  val sftp: SFTPClient = ssh.newSFTPClient()
  sftp.get(sourceFile, destinationFile)
  sftp.close()
  ssh.disconnect()
}

我在 Scala 版本 2.13.4 上测试了这个 build.sbt:

libraryDependencies += "com.hierynomus" % "sshj" % "0.31.0"
libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.2.3"

我不建议以这种方式实际使用它。其中一些步骤应该包含在 Try 中,然后在文件不存在或连接失败等情况下进行一些错误检查。为了清楚起见,我故意将其省略。

我并不是说这是完成此任务的唯一或正确的库。这只是第一个对我有用的。特别是 addHostKeyVerifier 方法对我的情况很有帮助。 还有其他库,如 JSCH、jassh、scala-ssh 和 scala-ftp,它们也可以很好地完成这项工作。