Чи можна вказати інший порт ssh при використанні rsync?


366

Я намагався виконати таку команду:

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

SSH працює на порту 2222, але rsync все ще намагається використовувати порт 22, а потім скаржиться на те, що не знайшов шлях, оскільки, звичайно, його не існує.

Мені хотілося б знати, чи можна rsync віддаленому хосту на нестандартному порту ssh.

Відповіді:


136

Інший варіант, у хості, з якого запускаєте rsync, встановіть порт у файлі ssh config, тобто:

cat ~/.ssh/config
Host host
    Port 2222

Тоді rsync через ssh поговорить з портом 2222:

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

21
Хоча це не найочевидніша відповідь, це все-таки дуже хороша відповідь. Варто використовувати конфігурацію SSH для будь-якого хоста, до якого ви підключаєтеся більше одного чи двох разів, оскільки це заощадить багато думок і набору тексту.
Джон Хант

5
Дійсно, хоча це справедливо, але його недолік стає невидимим, тобто через деякий час можна забути його у файлі ssh config та не зрозуміти, як він працює, або хтось із ваших колег може скопіювати / вставити команду і не зрозуміти, чому це не працює на їхньому рахунку. Тим не менш, особисто я вважаю за краще не постійно вводити номер порту.
Жоао Коста

1
Це жахливо. повністю сумісний з портом NATING. якщо ви не хочете мати кілька імен dns для однієї ip адреси, що є проблемою технічного обслуговування
meffect

1
@melfect Ви жартуєте? Я б не назвав це жахливим настільки, як я би назвав це найкращою річчю, яка коли-небудь потрібна тому rsyncдивному порту, але кожен раз розкидається достатньо, щоб забути синтаксис.
Freedom_Ben

1
Хоча це полегшує вам підключення, воно також полегшує хакерів, і ваш auth.log знову буде заповнений автоматизованими спробами. Таким чином, це нічим не змінює точку зміни портів.
квітня

625

Ваш командний рядок повинен виглядати так:

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

це прекрасно працює - я використовую його постійно, не потребуючи нових правил брандмауера - просто зауважте, що сама команда SSH укладена в лапки.


8
Цікаво, чому це так - це така очевидна потреба, все ще досить прихована, оскільки це ефективно створює псевдонім до бінарного файлу ssh. (Однак це спрацювало бездоганно)
jsbueno

1
Працює з символом двокрапкиuser@host:/path
Дмитро Сандалов

23
Ключова частина команди - -e 'ssh -p 2222', тому ви можете використовувати це з різними параметрами rsync
Evan Donovan

2
Зауважте, що якщо вам потрібно проаналізувати ключ ssh, ви можете зробити це на зразок -e 'ssh -i mykey -p 2222'
dranxo

9
чому - вилучення-надіслані файли? Якщо це небезпечно для вихідних даних, краще згадайте про це ...
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
і що саме це додає до існуючої відповіді?
Кріс Мейз

подивіться формат і та приклад. Я тут спростив речі.
Течі

4
Гаразд, ви видалили два необов'язкові варіанти, але по суті ваша відповідь точно така ж, як і прийнята ...
Кріс Майс

2
Це більш спрощене та форматоване. Простіше зрозуміти новим учням. До речі, дякую за те, що голосували без приводу
Течі

13

скористайтеся "параметром rsh". наприклад:

rsync -avz --rsh='ssh -p3382' root@remote_server_name:/opt/backups

зверніться до: http://www.linuxquestions.org/questions/linux-software-2/rsync-ssh-on-different-port-448112/


Працював і для мене! Я не знаю, чому відповідь, яка найбільше голосує, не працює ...
ch271828n

Працював і для мене! Мені потрібно було ключове слово "--rsh"
Taewoo Lee

2

Трохи офтопік, але може комусь допомогти. Якщо вам потрібно ввести пароль і порт, я пропоную використовувати sshpassпакет. Команда командного рядка виглядатиме так: sshpass -p "password" rsync -avzh -e 'ssh -p PORT312' root@192.xx.xxx.xxx:/dir_on_host/


Це не працює, тому що інтерактивна клавіатура обмінюється потоком даних, пошкоджуючи протокол.
Evi1M4chine


2

Правильний синтаксис полягає в тому, щоб сказати Rsync використовувати користувальницьку команду SSH (додавши -p 2222), яка створює захищений тунель до віддаленої сторони за допомогою SSH, а потім з'єднується через localhost: 873

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

Rsync працює як демон на порті 873 TCP, що не є захищеним.

Від людини Rsync:

Натисніть: rsync [ВАРІАНТ ...] SRC ... [USER @] HOST: DEST

Що вводить людей в оману, щоб спробувати це:

rsync -rvz --progress - вилучити-надіслані файли ./dir user @ host: 2222 / path

Однак це вказує йому підключитися до демона Rsync на порту 2222, якого там немає.


інші відповіді не згадували порт 873
Кевінф

питання полягало в тому, як змусити його працювати як ssh над портом 2222; незалежно від того, вимагає rsync чи ні, це вже інша історія.
Dan Steingart

@DanSteingart Я оновив відповідь, чи допомагає вона більше?
kevinf

-3

Мені не вдалося змусити rsync підключитися через ssh на інший порт, але мені вдалося перенаправити ssh-з'єднання на потрібний комп'ютер через iptables. Це не рішення, яке я шукав, але це вирішило мою проблему.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.