如何在scala中通过sftp读取文件
How to read a file via sftp in scala
我正在寻找一种在 Scala 中通过 sftp 协议读取文件(可能还有目录)的简单方法。
我的尝试:
我查看了 Alpakka 库,它是 akka 的一部分。
但这适用于流,这是一个我不熟悉的复杂主题,为此似乎付出了很多努力。
然后是spark-sftp:这个需要scala spark,加载一个文件有点大
java 的 jsch 库可以完成这项工作,但我无法使用它
我正在寻找使用库和 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,它们也可以很好地完成这项工作。
我正在寻找一种在 Scala 中通过 sftp 协议读取文件(可能还有目录)的简单方法。
我的尝试:
我查看了 Alpakka 库,它是 akka 的一部分。 但这适用于流,这是一个我不熟悉的复杂主题,为此似乎付出了很多努力。
然后是spark-sftp:这个需要scala spark,加载一个文件有点大
java 的 jsch 库可以完成这项工作,但我无法使用它
我正在寻找使用库和 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,它们也可以很好地完成这项工作。