Có thể chỉ định một cổng ssh khác khi sử dụng rsync không?


366

Tôi đã cố gắng thực hiện lệnh sau:

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

SSH đang chạy trên cổng 2222, nhưng rsync vẫn cố gắng sử dụng cổng 22 và sau đó phàn nàn về việc không tìm thấy đường dẫn, vì tất nhiên nó không tồn tại.

Tôi muốn biết nếu có thể rsync đến một máy chủ từ xa trên một cổng ssh không chuẩn.

Câu trả lời:


136

Một tùy chọn khác, trong máy chủ bạn chạy rsync từ, đặt cổng trong tệp cấu hình ssh, nghĩa là:

cat ~/.ssh/config
Host host
    Port 2222

Sau đó rsync qua ssh sẽ nói chuyện với cổng 2222:

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

21
Mặc dù đây không phải là câu trả lời rõ ràng nhất nhưng nó vẫn là một câu trả lời rất hay. Thật đáng để sử dụng cấu hình SSH cho bất kỳ máy chủ nào bạn kết nối với hơn một hoặc hai lần vì nó sẽ giúp bạn tiết kiệm rất nhiều suy nghĩ và đánh máy.
John Hunt

5
Thật vậy, mặc dù công bằng mà nói, nhược điểm là nó trở nên vô hình, tức là sau một thời gian, người ta có thể quên nó trong tệp cấu hình ssh và không hiểu cách thức hoạt động của nó, hoặc một trong những đồng nghiệp của bạn có thể sao chép / dán lệnh và không hiểu tại sao nó không hoạt động trong tài khoản của họ. Tuy nhiên, cá nhân tôi không cần phải gõ số cổng mọi lúc.
Joao Costa

1
Điều này thật kinh khủng. Nó hoàn toàn không tương thích với cổng NATing. trừ khi bạn muốn có nhiều tên dns cho cùng một địa chỉ IP, đó là vấn đề bảo trì
gặp sự cố

1
@melfect Bạn đang đùa à? Tôi sẽ không gọi nó là khủng khiếp như tôi gọi nó là điều tuyệt vời nhất đối với một người cần rsyncđến một cổng kỳ lạ nhiều lần nhưng mỗi lần được trải ra chỉ đủ để bạn quên cú pháp.
Freedom_Ben

1
Mặc dù điều này giúp bạn kết nối dễ dàng hơn, nhưng nó cũng giúp tin tặc dễ dàng hơn và auth.log của bạn sẽ một lần nữa bị ngập trong các nỗ lực tự động. Vì vậy, nó sắp xếp các điểm thay đổi cổng.
forthrin

625

Dòng lệnh của bạn sẽ trông như thế này:

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

điều này hoạt động tốt - tôi sử dụng nó mọi lúc mà không cần bất kỳ quy tắc tường lửa mới nào - chỉ cần lưu ý rằng lệnh SSH được đính kèm trong dấu ngoặc kép.


8
Tôi tự hỏi tại sao nó lại như vậy - đó là một nhu cầu rõ ràng như vậy, vẫn còn khá ẩn, vì điều này thực sự tạo ra một bí danh cho nhị phân ssh. (Tuy nhiên, nó hoạt động hoàn hảo)
jsbueno

1
Hoạt động với biểu tượng dấu hai chấmuser@host:/path
DmitrySandalov

23
phần quan trọng của lệnh là -e 'ssh -p 2222' để bạn có thể sử dụng lệnh này với các thông số rsync khác nhau
Evan Donovan

2
Lưu ý rằng nếu bạn cần chỉ định khóa ssh, bạn có thể làm như -e 'ssh -i mykey -p 2222'
dranxo

9
Tại sao --remove-sent-files? Nếu nó nguy hiểm với dữ liệu nguồn, tốt hơn là đề cập đến nó ...
Tiw

14

khi bạn cần gửi tệp qua một cổng SSH cụ thể:

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

thí dụ

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

3
và chính xác điều này làm gì thêm vào câu trả lời hiện có?
Chris Maes

nhìn vào định dạng và ví dụ Tôi đã đơn giản hóa mọi thứ ở đây.
Techie

4
OK bạn đã loại bỏ hai tùy chọn tùy chọn, nhưng về bản chất, câu trả lời của bạn hoàn toàn giống với lựa chọn được chấp nhận ...
Chris Maes

2
Nó đơn giản hơn và được định dạng. Dễ hiểu hơn cho người mới học. Nhân tiện, cảm ơn vì đã bỏ phiếu mà không có lý do
Techie


2

Một chút lạc quan nhưng có thể giúp đỡ một ai đó. Nếu bạn cần truyền mật khẩu và cổng tôi đề nghị sử dụng sshpassgói. Lệnh dòng lệnh sẽ như thế này: sshpass -p "password" rsync -avzh -e 'ssh -p PORT312' root@192.xx.xxx.xxx:/dir_on_host/


Điều này không hoạt động vì tương tác bàn phím gây rối với luồng dữ liệu, làm hỏng giao thức.
Evi1M4chine

2

Tôi tìm thấy giải pháp này trên trang của Mike Hike Hostetler hoạt động hoàn hảo với tôi.

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

3
và chính xác điều này làm gì thêm vào câu trả lời hiện có?
Chris Maes

Đẹp một hoạt động hoàn hảo. Cảm ơn :)
Sammu Sundar

2

Cú pháp đúng là yêu cầu Rupync sử dụng lệnh SSH tùy chỉnh (thêm -p 2222), tạo đường hầm an toàn cho phía từ xa bằng SSH, sau đó kết nối qua localhost: 873

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

Rsync chạy như một daemon trên cổng TCP 873, không an toàn.

Từ người đàn ông Rupync:

Đẩy: rsync [TÙY CHỌN ...] SRC ... [USER @] HOST: DEST

Mà đánh lừa mọi người để thử điều này:

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

Tuy nhiên, đó là hướng dẫn nó kết nối với daemon Rupync trên cổng 2222, không có ở đó.


các câu trả lời khác không đề cập đến cổng 873
kevinf

câu hỏi là làm thế nào để nó chạy như ssh qua cổng 2222; có hay không rsync yêu cầu nó là một câu chuyện khác nhau.
Dan Steingart

@DanStasingart Tôi đã cập nhật câu trả lời, nó có giúp thêm bây giờ không?
kevinf

-3

Tôi không thể có được rsync để kết nối qua ssh trên một cổng khác, nhưng tôi có thể chuyển hướng kết nối ssh sang máy tính tôi muốn thông qua iptables. Đây không phải là giải pháp tôi đang tìm kiếm, nhưng nó đã giải quyết vấn đề của tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.