Можно ли указать другой порт ssh при использовании rsync?


366

Я пытался выполнить следующую команду:

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

SSH работает на порте 2222, но rsync все еще пытается использовать порт 22, а затем жалуется на отсутствие пути, потому что, конечно, он не существует.

Я хотел бы знать, возможно ли rsync для удаленного хоста по нестандартному порту ssh.

Ответы:


136

Другой вариант: на хосте, с которого вы запускаете rsync, установите порт в конфигурационном файле ssh, то есть:

cat ~/.ssh/config
Host host
    Port 2222

Затем rsync через ssh будет общаться с портом 2222:

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

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

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

1
Это ужасно это абсолютно несовместимо с NAT-портом. если вы не хотите иметь несколько DNS-имен для одного и того же IP-адреса, что является проблемой технического обслуживания
действуйте

1
@ melfect Ты что, шутишь? Я бы не назвал это ужасным, так как я бы назвал это величайшей вещью для тех, кому нужно rsyncмногократно заходить в странный порт, но каждый раз достаточно просто, чтобы забыть синтаксис.
Freedom_Ben

1
Хотя это облегчает вам соединение, это также облегчает хакерам, и ваш auth.log снова будет завален автоматическими попытками. Так что это как бы лишает смысла менять порты.
forthrin

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
Эван Донован

2
Обратите внимание, что если вам нужно указать ключ ssh, вы можете сделать это, например, -e 'ssh -i mykey -p 2222'
dranxo

9
почему --remove-sent-файлы? Если это опасно для исходных данных, лучше упомянуть об этом ...
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
Это более упрощено и отформатировано. Легче понять для новых учеников. Кстати, спасибо, что проголосовали без причины
Techie

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 работает как демон на TCP-порту 873, который не является безопасным.

От Rsync человек:

Нажмите: rsync [ОПЦИЯ ...] SRC ... [ПОЛЬЗОВАТЕЛЬ @] ВЕДУЩИЙ: DEST

Что вводит людей в заблуждение, чтобы попробовать это:

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

Однако это указывает ему подключиться к демону Rsync через порт 2222, которого там нет.


другие ответы не упоминали порт 873
kevinf

вопрос был в том, как заставить его работать как ssh через порт 2222; Требует ли rsync это другой вопрос.
Дэн Стейнгарт,

@ DanSteingart Я обновил ответ, теперь он помогает?
Кевинф

-3

Мне не удалось заставить rsync подключиться через ssh через другой порт, но я смог перенаправить соединение ssh на компьютер, который я хотел через iptables. Это не то решение, которое я искал, но оно решило мою проблему.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.