2012-05-03 267 views
3

我的目標是下載,而不是從SFTP服務器上傳文件,並且我正在嘗試修改本網站上其他問題的代碼,以便這樣做(爲了方便起見,我粘貼了下面的代碼)。使用SFTP與VBA下載文件

我從Putty下載了PSFTP。 PSFTP關閉,當我嘗試使用以下命令行來連接:

open username:[email protected]: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 
+0

聽起來像你在製造一個木馬......笑話。 – Raptor

+0

我從來沒有使用sftp,所以現在我要建議的可能無法正常工作。 '-l'做什麼?在研究sftp時,我遇到了一個用戶使用'-B'而不是'-l'來下載文件的網站。看看是否有幫助? –

+1

@SiddharthRout'-l'選項用於指定服務器上的用戶帳戶。我認爲它的目的是模仿'ssh'客戶端命令的命令選項。 – HansUp

回答

1

我想你應該從Windows命令提示符會話開始。根據我在一個類似問題的回答中提出的那樣,在那裏弄清你的命令行的細節:SFTP upload with VBA。一旦你有一個在那裏工作的命令行,從VBA執行相同的命令將會非常簡單。

我從來沒有使用膩子的psftp.exe工具,只有pscp.exe,所以我不能提供有關如何構建你psftp.exe命令行幫助。我在Putty's documentation中注意到的一件事是,PSFTP(pscp.exe)只能用於SSH-2服務器---如果您的目標服務器僅支持SSH-1,則PSFTP將不起作用。

我認爲您應該查看該鏈接上的Putty文檔。