Apakah mungkin untuk menentukan port ssh yang berbeda saat menggunakan rsync?

366

Saya telah mencoba perintah berikut:

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

SSH berjalan pada port 2222, tetapi rsync masih mencoba menggunakan port 22 dan kemudian mengeluh tentang tidak menemukan jalan, karena tentu saja tidak ada.

Saya ingin tahu apakah mungkin untuk rsync ke host jarak jauh pada port ssh non-standar.

Ketema
sumber

Jawaban:

136

Opsi lain, di host tempat Anda menjalankan rsync, atur port di file konfigurasi ssh, yaitu:

cat ~/.ssh/config
Host host
    Port 2222

Kemudian rsync over ssh akan berbicara ke port 2222:

rsync -rvz --progress --remove-sent-files ./dir user@host:/path
Joao Costa
sumber
21
Meskipun ini bukan jawaban yang paling jelas, itu masih merupakan jawaban yang sangat bagus. Ada baiknya menggunakan konfigurasi SSH untuk semua host yang terhubung dengan Anda lebih dari sekali atau dua kali karena itu akan menghemat banyak pemikiran dan mengetik.
John Hunt
5
Memang, meskipun untuk bersikap adil, kerugiannya menjadi tidak terlihat, yaitu, setelah beberapa saat orang mungkin lupa itu ada di file konfigurasi ssh dan tidak mengerti cara kerjanya, atau salah satu rekan Anda mungkin menyalin / menempelkan perintah dan tidak mengerti mengapa itu tidak berfungsi di akun mereka. Namun, secara pribadi saya lebih suka tidak harus mengetikkan nomor port sepanjang waktu.
Joao Costa
1
Ini mengerikan. sepenuhnya tidak kompatibel dengan port NATing. kecuali jika Anda ingin memiliki beberapa nama dns untuk alamat ip yang sama, yang merupakan masalah pemeliharaan
meffect
1
@ sempurna Apakah Anda bercanda? Saya tidak akan menyebutnya mengerikan sebanyak yang saya sebut sebagai hal terbesar yang pernah ada bagi seseorang yang perlu ke rsyncpelabuhan aneh berkali-kali tetapi setiap kali tersebar cukup ke tempat Anda melupakan sintaks.
Freedom_Ben
1
Meskipun ini membuat Anda lebih mudah terhubung, itu juga memudahkan peretas, dan auth.log Anda sekali lagi akan dibanjiri oleh upaya otomatis. Jadi itu semacam mengosongkan titik mengubah port.
sebagainyarin
625

Baris perintah Anda akan terlihat seperti ini:

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

ini berfungsi dengan baik - Saya menggunakannya sepanjang waktu tanpa memerlukan aturan firewall baru - perhatikan saja perintah SSH itu sendiri terlampir dalam tanda kutip.

klapa
sumber
8
Saya bertanya-tanya mengapa begitu - ini adalah kebutuhan yang jelas, masih cukup tersembunyi, karena ini secara efektif membuat alias ke ssh biner. (Tapi itu bekerja dengan sempurna)
jsbueno
1
Bekerja dengan simbol titik duauser@host:/path
DmitrySandalov
23
bagian kunci dari perintah ini adalah -e 'ssh -p 2222' sehingga Anda dapat menggunakan ini dengan params rsync yang berbeda
Evan Donovan
2
Perhatikan bahwa jika Anda perlu menentukan kunci ssh, Anda dapat melakukannya seperti -e 'ssh -i mykey -p 2222'
dranxo
9
mengapa --menghapus-mengirim-file? Jika berbahaya bagi sumber data, sebutkan saja ...
Tiw
14

ketika Anda perlu mengirim file melalui port SSH tertentu:

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

contoh

rsync -azP -e "ssh -p 2121" /path/to/files/source user@remoteip:/path/to/files/destination
Techie
sumber
3
dan apa sebenarnya yang ditambahkan ke jawaban yang ada?
Chris Maes
lihat format dan contohnya. Saya telah menyederhanakan hal-hal di sini.
Techie
4
OK, Anda menghapus dua opsi opsional, tetapi pada dasarnya jawaban Anda persis sama dengan yang diterima ...
Chris Maes
2
Ini lebih disederhanakan dan diformat. Lebih mudah dipahami oleh pelajar baru. Ngomong-ngomong, terima kasih telah memilih tanpa alasan
Techie
2

Sedikit offtopic tetapi mungkin bisa membantu seseorang. Jika Anda perlu memasukkan kata sandi dan port saya sarankan menggunakan sshpasspaket. Perintah baris perintah akan terlihat seperti ini: sshpass -p "password" rsync -avzh -e 'ssh -p PORT312' [email protected]:/dir_on_host/

Tomas
sumber
Ini tidak berfungsi karena keyboard-interaktif mengacaukan aliran data, merusak protokol.
Evi1M4chine
2

Saya menemukan solusi ini di situs Mike Hike Hostetler yang bekerja sempurna untuk saya.

# rsync -avz -e "ssh -p $portNumber" user@remoteip:/path/to/files/ /local/path/
Rusty1
sumber
3
dan apa sebenarnya yang ditambahkan ke jawaban yang ada?
Chris Maes
Bagus bekerja dengan sempurna. Terima kasih :)
Sammu Sundar
2

Sintaks yang benar adalah untuk memberitahu Rsync untuk menggunakan perintah SSH khusus (menambahkan -p 2222), yang membuat terowongan aman ke sisi jauh menggunakan SSH, kemudian menghubungkan melalui localhost: 873

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

Rsync berjalan sebagai daemon pada port TCP 873, yang tidak aman.

Dari Rsync man:

Push: rsync [OPTION ...] SRC ... [USER @] PEMBAWA ACARA: DEST

Yang menyesatkan orang untuk mencoba ini:

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

Namun, itu menginstruksikannya untuk terhubung ke daemon Rsync pada port 2222, yang tidak ada di sana.

kevinf
sumber
jawaban lain tidak menyebutkan port 873
kevinf
pertanyaannya adalah bagaimana menjalankannya sebagai ssh over port 2222; apakah rsync mensyaratkan atau tidak itu cerita yang berbeda.
Dan Steingart
@DanSteingart Saya memperbarui jawabannya, apakah ini lebih membantu sekarang?
kevinf
-3

Saya tidak bisa mendapatkan rsync untuk terhubung melalui ssh pada port yang berbeda, tetapi saya bisa mengarahkan kembali koneksi ssh ke komputer yang saya inginkan melalui iptables. Ini bukan solusi yang saya cari, tetapi itu memecahkan masalah saya.

Ketema
sumber