rsyncを使用するときに別のSSHポートを指定することは可能ですか?


366

私は次のコマンドを試みています:

rsync -rvz --progress --remove-sent-files ./dir user@host:2222/path

SSHはポート2222で実行されていますが、rsyncは引き続きポート22を使用しようとしますが、パスが見つからないというメッセージが表示されますが、もちろん存在しません。

非標準のsshポートでリモートホストにrsyncできるかどうか知りたいのですが。

回答:


136

別のオプションとして、rsyncを実行するホストで、ssh構成ファイルにポートを設定します。

cat ~/.ssh/config
Host host
    Port 2222

次に、sshを介したrsyncがポート2222と通信します。

rsync -rvz --progress --remove-sent-files ./dir user@host:/path

21
これは最も明白な答えではありませんが、それでも非常に良い答えです。何度も接続するホストにSSH構成を使用することは価値があります。多くの思考とタイピングを節約できるからです。
ジョンハント

5
実際、公平ではありますが、欠点は見えなくなります。つまり、しばらくすると、ssh構成ファイルにあることを忘れて、それがどのように機能するのかを理解できなかったり、同僚の1人がコマンドをコピーして貼り付けたり、理由を理解できなかったりします。アカウントでは機能しません。それでも、個人的には常にポート番号を入力する必要はありません。
ジョアンコスタ

1
これは恐ろしいことです。そのポートNATingと完全に互換性がありません。同じIPアドレスに複数のDNS名が必要な場合を除いて、これはメンテナンスの問題です
meffect

1
@melfect冗談ですか?rsync奇妙なポートに何度もアクセスする必要があるが、そのたびに構文を忘れてしまうほど十分に広がっている人にとっては、私がそれをこれまでで最高のものと呼ぶほどひどいとは思わないでしょう。
Freedom_Ben

1
これにより接続が簡単になりますが、ハッカーにとっても簡単になり、auth.logは再び自動化された試行で一杯になります。したがって、ポートを変更するポイントが無効になります。
フォースリン2018

625

コマンドラインは次のようになります。

rsync -rvz -e 'ssh -p 2222' --progress ./dir user@host:/path

これは正常に機能します。新しいファイアウォールルールを必要とせずに常に使用しています。SSHコマンド自体が引用符で囲まれていることに注意してください。


8
なぜそうなのかと思います。これはsshバイナリのエイリアスを効果的に作成しているため、これは非常に明白な必要性ですが、依然として非常に隠されています。(ただし、問題なく動作しました)
jsbueno 2013

1
コロン記号を使用user@host:/path
DmitrySandalov 14

23
コマンドの重要な部分は-e 'ssh -p 2222'なので、これをさまざまなrsyncパラメータで使用できます
Evan Donovan

2
sshキーを指定する必要がある場合は、-e 'ssh -i mykey -p 2222'
dranxo

9
なぜ--remove-sent-files?それは、ソースデータに危険だ場合は、より良いそれを言及...
TIW

14

特定のSSHポートを介してファイルを送信する必要がある場合:

rsync -azP -e "ssh -p PORT_NUMBER" source destination

rsync -azP -e "ssh -p 2121" /path/to/files/source user@remoteip:/path/to/files/destination

3
そして、これは既存の答えに正確に何を追加しますか?
Chris Maes

フォーマットと例を見てください。ここでは簡略化しました。
Techie、2015

4
さて、2つのオプションのオプションを削除しましたが、基本的に、あなたの答えは受け入れられたものとまったく同じです...
Chris Maes

2
より単純化され、フォーマットされています。新しい学習者にとって理解しやすくなります。ちなみに理由のない投票に感謝
Techie


2

少し話題外ですが、誰かを助けるかもしれません。パスワードとポートを渡す必要がある場合は、sshpassパッケージの使用をお勧めします。コマンドラインコマンドは次のようになります。 sshpass -p "password" rsync -avzh -e 'ssh -p PORT312' root@192.xx.xxx.xxx:/dir_on_host/


キーボードインタラクティブがデータストリームを混乱させ、プロトコルを破壊するため、これは機能しません。
Evi1M4chine 16

2

私はこの解決策をMike Hike Hostetlerのサイトで見つけました。

# rsync -avz -e "ssh -p $portNumber" user@remoteip:/path/to/files/ /local/path/

3
そして、これは既存の答えに正確に何を追加しますか?
Chris Maes

ニースのものは完全に動作します。ありがとう:)
Sammu Sundar

2

正しい構文は、RsyncにカスタムSSHコマンド(-p 2222を追加)を使用するように指示することです。これにより、SSHを使用してリモート側へのセキュアなトンネルが作成され、localhost:873を介して接続されます。

rsync -rvz --progress --remove-sent-files -e "ssh -p 2222" ./dir user @ host / path

RsyncはTCPポート873でデーモンとして実行されますが、これは安全ではありません。

Rsync manから:

プッシュ:rsync [オプション...] SRC ... [ユーザー@]ホスト:デスト

これは人々にこれを試すように誤解させます:

rsync -rvz --progress --remove-sent-files ./dir user @ host:2222 / path

ただし、それはそこにないポート2222でRsyncデーモンに接続するように指示しています。


他の回答はポート873について言及していませんでした
kevinf '11年

問題は、ポート2222でSSHとして実行する方法でした。rsyncがそれを必要とするかどうかは別の話です。
Dan Steingart

@DanSteingart私は答えを更新しましたが、今はもっと役に立ちますか?
kevinf

-3

別のポートでsshを介してrsyncに接続することはできませんでしたが、stable接続をiptablesを介して目的のコンピューターにリダイレクトできました。これは私が探していた解決策ではありませんが、私の問題は解決しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.