如何使用 SSH 將資料夾從本機電腦正確複製到伺服器?為什麼 scp 指令會出錯?

如何使用 SSH 將資料夾從本機電腦正確複製到伺服器?為什麼 scp 指令會出錯?

我透過以下方式登入我的網頁伺服器SSH使用名為MobaXterm(它有點像 Putty,但具有高級功能,這並不那麼重要...)

我的問題是我想將本機電腦(Windows)中的目錄傳送到該伺服器(Linux)的特定目錄。

所以我嘗試使用SCP命令如下圖所示:http://www.hypexr.org/linux_scp_help.php

我是這樣做的:

-jailshell-4.1$ scp -r C:\Users\Andrea\Documents\Betrivius\candycane-0.9.6\candycane /home6/XXX/public_html

ssh: Could not resolve hostname C: Name or service not known

但是,正如您所看到的,我收到了一個錯誤。

為什麼?我缺什麼?我該如何解決這個問題?

總氮

答案1

假設您正在本機 MobaXterm shell(即 Windows 電腦本機)中執行它。如果是這種情況,您需要更新 scp 命令語法以適應該環境,儘管該語法無論如何都是不正確的。

MobaXterm 透過 mountpoint 提供對其 shell 中本機磁碟機的訪問/drives/X,其中 X 是 Windows 磁碟機號碼。

此外,無論環境如何,scp 的(簡化)通用語法是:

scp用法:

scp [[user@]host1:]/path[/filename] [[user@]host2:]/path/[filename]

第一個序列 ( [[user@]host1:]/path[/filename]) 是「FROM」部分;要複製的一個或多個文件的來源。第二個是「TO」;目的地。括號表示可選參數。

它實際上只是標準 cp 命令的啟用 ssh 的版本;前面的部分:包含 ssh 特定訊息,後面的部分涉及 cp 操作。

用戶:

user預設為您目前的本機使用者名稱 - 如果來源和目標中的使用者名稱都是正確的,則可以將其省略。

主持人:

host預設為本機(localhost);因此,如果您要複製到本機/從本機電腦複製,並且要使用的本機上的使用者名稱是目前用戶,則可以省略本機檔案的該參數。

文件路徑:

path/filename預設為指定的使用者主目錄,如果需要,可以省略。在您的情況下進行遞歸複製時,可以省略檔案名稱 - 在這種情況下只需提供路徑。通常,完整路徑和檔案名稱在 FROM 部分中指定,而在 TO 部分中僅指定路徑(預設為保持相同的檔案名稱)。

我使用remoteuserremotePC作為用戶名和遠端 PC 主機名稱;替換為正確的名稱。

您的範例中的正確語法:

 scp -r "/drives/C/Users/Andrea/Documents/Betrivius/candycane-0.9.6/candycane" remoteuser@remotePC:/home6/XXX/public_html

使用命令man scp這個網站了解更多詳細資訊(參數、其他使用資訊)。

圖形使用者介面選項

或者,MobaXterm 提供圖形檔案瀏覽器(基於設定選項建構在 sftp 或 scp 上),當您透過 ssh 連線到遠端主機時,該瀏覽器會提供拖曳雙向檔案傳輸。詳細資訊在這裡

答案2

除非該網頁伺服器有辦法直接連接到您的 Windows 電腦(在連接埠 22 上,這將需要執行 SSH 守護程式以及轉送連接埠),否則您將需要從 Windows 端呼叫 SCP。 MobaXTerm 是一個 ssh 用戶端,我不確定它是否內建了 SCP(我個人不使用它),但這裡最好的解決方案是使用 SCP 用戶端,無論是命令列客戶端還是 GUI 用戶端。

一個相當流行的 Windows 用戶端是WinSCP,當我別無選擇只能使用 Windows 時,它就是我的首選客戶端。

答案3

回答

為什麼 scp 指令會出錯?

,錯誤是

ssh: Could not resolve hostname C: Name or service not known

,使用的命令是

scp -r C:\Users\Andrea\Documents\Betrivius\candycane-0.9.6\candycane /home6/XXX/public_html

我會說:

語法C:\Users\....錯誤。在這種情況下,您有兩種可能性來描述路徑:

  1. foo/bar/...: 表示這foo是從您的路徑中可見的目錄(資料夾),它可能是您目前的路徑(pwd)或路徑環境變數(echo $PATH)。

  2. /foo/bar/...意味著這foo是檔案系統根目錄下的目錄(資料夾)。

當您使用第一個選項時(因為“C:”之前沒有“/”),shellC:在路徑中搜索,但找不到它。因此,它嘗試匹配另一種語法:[user@]host1:/path/..../filename。在這種情況下,ssh 會抱怨,因為它找不到 IP 位址C:(因為它認為這C:是主機名稱)。尋找主機名稱對應的IP位址稱為“主機名解析"; 這裡這個解決方案失敗了,所以你理解這個錯誤。

答案4

在 Windows 中,以下命令對我有用:- scp -r "Reqd.Folder name inquotes" username@remote_server:伺服器上的檔案路徑

scp -r "ABC" shivam@remote_server:/media/External/shivam.

在執行之前移至所需資料夾所在的資料夾

相關內容