Cách SSH trên một cổng khác ngoài 22


151

Tôi có hai máy tính phía sau cùng một bộ định tuyến. Hãy gọi họ là A và B.

A có thể SSH đến B theo cách sau: ssh usr@<internal ip of computer>

B có thể SSH đến A bằng cách làm tương tự, nhưng phải sử dụng IP bên ngoài. Tôi đã chuyển cổng 22 của bộ định tuyến của mình sang IP của máy tính A, để tất cả có ý nghĩa với tôi.

Tuy nhiên, tôi cũng muốn chuyển tiếp cổng 26 sang máy tính B và SSH từ bên ngoài mạng bằng cách sử dụng IP bên ngoài cho cả hai, nhưng chỉ định cổng 22 hoặc 26, để chọn hiệu quả máy tính nào sẽ sử dụng.

Tôi đã thử cho phép cổng 26 thông qua OUTPUT iptablestrên A và INPUT của B, nhưng điều đó dường như không hoạt động. Tôi cũng đã chuyển tiếp cổng 26 đến IP bên trong của B (thông qua bộ định tuyến), như tôi đã làm với 22 cho A.

Đây là những gì tôi nhận được khi cố gắng SSH từ A đến B bằng IP bên ngoài và cổng 26:

ssh: connect to host xx.xx.xxx.xx port 26: Connection refused.

Phiên bản:

  • A = OpenSSH_5.9p1 Debian-5ubfox1, OpenSSL 1.0.1 14 tháng 3 năm 2012
  • B = OpenSSH_6.0p1 Debian-4, OpenSSL 1.0.1c ngày 10 tháng 5 năm 2012

A có 12.04 Ubuntu, B là Raspberry Pi với Raspbian.

EDIT: Một cái gì đó mà tôi quên đặt vào: Tôi đã thử chuyển đổi tệp cấu hình SSH (tôi thấy nó là /etc/ssh/ssh_config) Tôi đã bỏ ghi chú (đã xóa #) dòng Portvà thay đổi 22thành 26. Nó cho tôi kết nối từ chối tin nhắn vẫn còn. (Tôi đã khởi động lại vô ích.)


Do yuu ohave SSH chạy trên cổng 22 hoặc 26 trên máy thứ hai?
Nerdfest

1
Lưu ý rằng / etc / ssh / ssh_config là cấu hình máy khách ssh. Trong đó / etc / ssh / sshd_config là cấu hình ssh daemon.
steakunderscore

Câu trả lời:


45

Có vẻ như bạn không chạy SSH trên cổng 26 trên máy thứ hai. Bạn có thể thay đổi số cổng trên máy đó thành 26.

Chỉnh sửa /etc/ssh/sshd_config& đừng quên khởi động lại SSH hoặc để nó vào ngày 22, nhưng chuyển tiếp cổng 26 trên bộ định tuyến sang cổng 22 trên máy thứ hai. Ngoài ra, đừng quên thay đổi bất kỳ cài đặt tường lửa nào trên máy thứ hai để cho phép các kết nối thông qua.


À ... vậy sshd_config phải thay đổi chứ không phải ssh_config?
Gary

2
Chính xác. sshd là dịch vụ (d dành cho daemon). Chỉnh sửa tệp cấu hình (với sudo gedit), sau đó khởi động lại dịch vụ với "sudo service ssh restart".
Nerdfest

2
Đã giải quyết vấn đề. Không phải thay đổi bất kỳ cài đặt tường lửa nào.
Gary

371

Nếu bạn đang ở trên hệ thống Linux và bạn muốn kết nối với máy chủ SSH trên cổng 26, bạn có thể sử dụng lệnh sau.

ssh user@192.168.1.1 -p 26

Ghi chú:

  1. Thay thế IP máy chủ bằng Địa chỉ IP hoặc tên DNS của máy chủ của bạn.
  2. Thay đổi số cổng của bạn như bạn đã đặt.
  3. Nếu bạn đang sử dụng SSH cổng tùy chỉnh thì hầu hết các cổng đều được phép cho kết nối ngoài, kết nối trong trên tường lửa nếu không kết nối sẽ không được thiết lập

17
Điều này nên được đánh dấu là chính xác.
ken_oy

1
Tôi đồng ý đây là câu trả lời đúng. Điều này là đơn giản và đi đến điểm.
m4l490n

1
@ tổng đánh dấu cái này là chính xác
thơ sầu

7
Không, đây KHÔNG phải là câu trả lời đúng. OP gặp sự cố với trình nền không nghe trên cổng mong muốn. Ông rõ ràng đã yêu cầu trợ giúp với máy chủ SSH và / hoặc cấu hình NAT, nhưng câu trả lời hiện tại bỏ qua bài đăng gốc và mô tả tùy chọn lệnh máy khách đã biết với OP. Tôi tự hỏi làm thế nào câu trả lời này có rất nhiều upvote.
nnovich-OK

2
Điều này đúng với đa số, nhưng điều này không đúng với vấn đề của OP.
Siêu âm54321

9

Tôi chỉ sử dụng cổng 22 để truy cập ssh mạng nội bộ.

Để truy cập qua internet, tôi sử dụng một cổng tùy chỉnh (không bình thường). Điều này có lợi ích khi tôi giảm tải được tạo ra bởi những đứa trẻ script đang quét cổng 22 cho "tên người dùng nổi tiếng".

Các quy trình sshd bên ngoài được kiểm soát bởi xinetdvà chạy song song với quy trình nội bộ sshd . Trong ví dụ sau tôi sử dụng cổng 12345:

Bạn có thể tự do thay đổi số này thành bất kỳ số cổng miễn phí có sẵn nào trên hệ thống của bạn. Có thể giá trị cao hơn sẽ khiến cho cổng này không bị quét bởi "quét cổng nhanh" .

Các xinetdcấu hình là:

service ssh-external
{
    socket_type = stream
    wait = no
    protocol = tcp
    type = UNLISTED
    user = root
    server = /usr/sbin/sshd
    server_args = -i -f  /etc/ssh/external-sshd.config
    port = 12345
    log_on_failure += USERID
}

Các tập tin /etc/ssh/external-ssdh.configcó thể là một bản sao của sshdcấu hình thông thường của bạn . Đảm bảo rằng các câu lệnh sau được cấu hình:

Port 12345
AddressFamily inet

Tôi cũng đề nghị thực thi xác thực khóa công khai và vô hiệu hóa xác thực mật khẩu để truy cập internet:

PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no

7

Cổng nghe cũng có thể được liên kết cứng với địa chỉ IP

/ etc / ssh / sshd_config:

ListenAddress 10.10.10.10:22
ListenAddress 20.20.20.20:4444

đây nên là một bình luận không phải là một câu trả lời
Pablo Pazos

1

Như tôi đã giải thích trong một câu trả lời có liên quan , ssh client cho phép chỉ định định dạng URI là ssh://user@host:1234. Ví dụ:

ssh  ssh://myuser@mydomain.com:2222

Trong đó 2222 là số cổng. Thay thế số cổng mà bạn định sử dụng thay thế. Tất nhiên, hãy nhớ rằng để kết nối với máy chủ ssh cổng được chỉ định (trên máy chủ mà bạn đang cố gắng kết nối) phải lắng nghe trên cổng được chỉ định ở vị trí đầu tiên


0

Không nên chạy ssh trên cổng mặc định (TCP / 22), không chuyển tiếp từ WAN IP 22 sang bất kỳ cổng nào đang sử dụng ssh-server trên LAN IP.

Theo nghĩa chung hơn để kết nối với dịch vụ ssh-server nên lắng nghe trên cổng đó. Bạn phải

  1. Chỉnh sửa trên /etc/ssh/sshd_config( lưu ý d ) từ #Port 22đến Port 26. Tức là, không chú ý và thay đổi cổng. Có lẽ tốt hơn 26 sẽ là một cái gì đó ngẫu nhiên ở trên , như 42895.
  2. Khởi động lại dịch vụ ssh-server

    sudo systemctl restart sshd.service
    

Sau đó, từ ssh-client, bạn sẽ có thể kết nối

ssh user@serverNameOrIP -p 42895

Thêm: mosh

Nếu gói mosh được cài đặt trên máy chủ thì bạn sử dụng

mosh --ssh="ssh -p 42895" serverNameOrIP
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.