使用VBA通过SFTP下载文件

3
我的目标是从SFTP服务器下载文件而不是上传文件,我正在尝试改编这个站点上另一个问题的代码来实现这一点(为了方便起见,我将代码粘贴在下面)。 我从Putty下载了PSFTP。 当我尝试使用以下命令行连接时,PSFTP会关闭:
open username:password@server.com.port:1111 

我有三个问题:
  1. 我的命令行是否存在问题?如果没有问题,那么可能是什么问题呢?

  2. 据我所知,SFTP通常会使用get/put命令,但是在下面的代码中我没有看到put命令,因此我不明白在哪里输入get命令以下载文件而不是上传文件(这就是下面的代码应该执行的操作)。

  3. pRemotePath是SFTP服务器上文件的位置,pFile是我想要下载文件的位置,这是正确的吗?

非常感谢简单易懂的解释。
Public Sub SftpGet()

    Const cstrSftp As String = """C:\Users\Ron\UtilityTools\psftp.exe"""
    Dim strCommand As String
    Dim pUser As String
    Dim pPass As String
    Dim pHost As String
    Dim pFile As String
    Dim pRemotePath As String

    pUser = "uid"
    pPass = "PW"
    pHost = "dns"
    pFile = "C:\Users\Ron\activity.txt" 
    pRemotePath = "Z:/activity.log"

    strCommand = cstrSftp & " -sftp -l " & pUser & " -pw " & pPass & _
        " " & pFile & " " & pHost & ":" & pRemotePath
    Debug.Print strCommand
    Shell strCommand, 1 ' vbNormalFocus '
End Sub

听起来你在开玩笑制作木马病毒。 - Raptor
我从未使用过sftp,所以我现在要建议的可能行不通。-l是什么意思?在研究sftp时,我看到一个用户使用了-B而不是-l来下载文件。看看那是否有帮助? - Siddharth Rout
1
@SiddharthRout -l选项用于指定服务器上的用户帐户。我认为它旨在模仿“ssh”客户端命令中的命令选项。 - HansUp
@HansUp:啊,我明白了,感谢您的解释。顺便说一下,我指的是这个帖子。http://www.mrexcel.com/forum/showthread.php?t=520857 其中用户正在使用“-B”,并且它对他起作用了。我想知道“-B”是什么意思... - Siddharth Rout
@SiddharthRout 我从未使用过那个附件反射客户端。根据他们的文档,似乎 -B 选项用于指向一个文件,该文件包含在连接到服务器后作为批处理运行的命令。http://docs.attachmate.com/reflection/rsit-ssh/7.2/winclient/en/help/index.htm - HansUp
1
@HansUp:再次感谢。我想我需要更深入地了解sftp。它看起来很有趣。 :) - Siddharth Rout
1个回答

2
我认为您应该从Windows命令提示符会话开始。像我在回答类似问题时建议的那样,在那里解决您的命令行细节:使用VBA上传SFTP。一旦您有了一个可行的命令行,就可以非常容易地从VBA执行相同的命令。
我从未使用过Putty的psftp.exe工具,只用过pscp.exe,因此无法提供有关如何构建psftp.exe命令行的帮助。我在Putty文档中注意到的一件事是,PSFTP(pscp.exe)只能与SSH-2服务器一起使用 --- 如果您的目标服务器仅支持SSH-1,则PSFTP将无法工作。
我认为您值得在该链接处查看Putty文档。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接