在Linux中,使用rsync同步資料時,假如採用的是ssh方式,並且目標機器的sshd端端並不是預設的22埠,該如何做?

黄嘉波發表於2024-07-05

在使用rsync透過SSH進行資料同步時,如果目標機器的SSH服務沒有執行在預設的22埠上,你需要指定SSH連線應該使用的埠。這可以透過-e選項來實現,後面跟上ssh命令和-p引數來指定埠號。

以下是使用非預設埠的SSH進行rsync同步的基本命令格式:

rsync -avz -e "ssh -p <port>" <source> <user>@<host>:<destination>

這裡的引數解釋如下:

  • -a:代表--archive,它使得rsync同步時保持原有檔案的屬性,如許可權、時間戳等。
  • -v:代表--verbose,它使得rsync在同步過程中提供詳細的輸出資訊。
  • -z:代表--compress,它在傳輸過程中壓縮資料,以減少傳輸的資料量。
  • -e:允許你指定一個命令來建立到遠端主機的安全連線。在這個例子中,我們使用ssh
  • -p <port>:指定SSH連線應該使用的埠號。
  • <source>:原始檔或目錄的路徑。
  • <user>:目標機器上的使用者名稱。
  • <host>:目標機器的主機名或IP地址。
  • <destination>:目標檔案或目錄的路徑。

例如,如果目標機器的SSH服務執行在埠2222上,你可以使用以下命令:

rsync -avz -e "ssh -p 2222" /path/to/source/ user@example.com:/path/to/destination/

在這個例子中,/path/to/source/是本地要同步的源目錄,user@example.com是目標機器的使用者名稱和地址,/path/to/destination/是目標目錄,而-p 2222指定了使用埠2222

此外,如果你經常需要使用非預設埠進行同步,可以將這個埠號配置在~/.ssh/config檔案中,這樣你就不需要在每次使用rsync時都指定埠號。配置檔案示例如下:

Host myserver
    HostName example.com
    User myuser
    Port 2222

在這個配置中,Host myserver是一個別名,你可以在rsync命令中使用它來代替完整的主機名和埠資訊:

rsync -avz -e "ssh -p 2222" /path/to/source/ myserver:/path/to/destination/

綜上所述,你就不需要在每次命令中都指定埠號,因為SSH客戶端會從配置檔案中讀取埠資訊。

綜上所述,請確保在使用這些命令之前,你已經正確配置了SSH金鑰或密碼認證,以便rsync能夠無障礙地透過SSH連線到遠端主機。

相關文章