Làm thế nào để thiết lập ssh để thử không chỉ cổng 22 mà cả cổng phụ mỗi lần?


9

Là một phần trong nỗ lực giảm tiếng ồn trong nhật ký và giảm nhẹ khả năng phát hiện (và trên hết fail2ban, chỉ cho phép xác thực khóa công khai, v.v.) Tôi thường xuyên thay đổi cổng sshd trên các máy chủ mà tôi thiết lập sang một cổng khác, giả sử 5492. Hiện tại Tôi hoặc thêm -p 5492 vào lệnh ssh của tôi hoặc thêm cổng cho từng máy chủ cụ thể vào ssh_config.

Có cách nào để cấu hình ssh để thử kết nối với cả cổng 22 và cổng 5492 nếu cổng 22 không hoạt động không?


1
Tôi thích thay vì bảo mật thông qua che khuất, thiết lập VPN và hoàn toàn không có cổng ssh mở với Internet.
Rui F Ribeiro

2
@RuiFRibeiro Tôi đồng ý, rằng nó không an toàn hơn. Tuy nhiên, nó làm giảm tiếng ồn trong các tệp nhật ký. Người ta cũng có thể sử dụng cổng gõ để giảm các nỗ lực đăng nhập nhằm tăng tính bảo mật.
Ned64

2
@RuiFRibeiro Có phải máy chủ VPN an toàn hơn máy chủ SSH không?
Riley

Tất cả phụ thuộc vào việc thực hiện. Trong công việc trước đây của tôi, tôi đã xác định 2 mục VPN để dự phòng và không có sshsự hiện diện nào cho bên ngoài.
Rui F Ribeiro

2
Bảo mật bằng cách che khuất là một lớp BỔ SUNG tốt trên đầu trang của một thiết lập tốt, đặc biệt khi đó là về những kẻ tấn công cơ hội.
rackandboneman

Câu trả lời:


11

Bạn có thể bọc một tập lệnh shell xung quanh sshnhưng sshchính nó sẽ không làm điều đó.

Một cách sử dụng hàm bash là cách này (đưa vào ~/.bashrc):

function ssh() { command ssh -p 22 "$@" || command ssh -p 5492 "$@"; }

Nhân tiện, nên sử dụng rootcác cổng được giám sát cho các dịch vụ hệ thống như sshđể tránh người dùng có quá trình lắng nghe, ví dụ, cổng 5492. Họ có thể chơi người ở giữa và có thể thu thập dữ liệu đăng nhập. Vì vậy, sử dụng một cổng <1024.


1
Đó là một giải pháp tuyệt vời. Cũng là một lưu ý tuyệt vời trên các cổng!
Riley

5
Lưu ý rằng kết nối thứ hai sẽ được thực hiện ngay cả khi kết nối đầu tiên thành công nếu lệnh được thực thi bằng cách sshtrả về khác không. Một ví dụ tầm thường sẽ là ssh user@server false.
Kusalananda

1
@Kusalananda Cảm ơn, tôi đã viết commandngay bây giờ. Chỉ muốn tránh đệ quy, như bạn đã đoán đúng.
Ned64

Vấn đề @Kusalananda có thể tránh được (phần lớn) bằng cách kiểm tra trạng thái thoát cụ thể của ssh- nếu có lỗi ssh (trái với lệnh từ xa không thành công), nó sẽ thoát với trạng thái 255. Do đó, command ssh -p 22 "$@"; if [ "$?" -eq 255 ]; then command ssh -p 5492 "$@"; fisẽ hoạt động.
Gordon Davisson

10

sshchính nó có thể làm điều này thông qua Matchtài liệu ssh_config(5)mặc dù tài liệu hơi thưa thớt trên các ví dụ. Hình thức này có thể phù hợp nếu một người muốn đẩy sự phức tạp vào cấu hình SSH mặc dù bị hạn chế bởi các giới hạn của ssh_config(5)cú pháp và có thể yêu cầu một số thay đổi cho kết quả mong muốn. Đáng chú ý là cổng tùy chỉnh không thể được đặt hoặc có thể được đặt sai từ lần Matchthử trước . Đây là lý do tại sao, bên dưới, nó được đặt hai lần khi được kiểm tra hoặc một lần cho mặc định và không được đặt khi thiết lập mặc định chính tắc.

# here we set the defaults for the host (no port!)
Match !canonical host testhost
  CanonicalizeHostname yes
  Hostname 192.0.2.42
  IdentityFile ~/.ssh/id_blahblah
  ...
# port available?
Match canonical host 192.0.2.42 exec "is-ssh-up %h 2222"
  Port 2222
# or the default port
Match canonical host 192.0.2.42
  Port 22

is-ssh-up chỉ kiểm tra xem một cái gì đó phản hồi trên cổng đã cho và có thể trông giống như

#!/usr/bin/env expect
package require Tcl 8.5
if {[llength $argv] < 2} {
   puts stderr "Usage: is-ssh-up host port"
   exit 1
}
puts stderr "is-ssh-up: DEBUG trying $argv"
set socket [socket -async [lindex $argv 0] [lindex $argv 1]]
chan event $socket readable [list exit 0]
after 3000 [list exit 1]
vwait godot

1
if-then-other trong .ssh / config? Tôi sẽ không tin điều đó !!
Archemar

1

Bạn có thể sử dụng chức năng ký tự đại diện của ~.ssh/config, đưa mục này vào danh sách của bạn:

Host *
Port 5492

Nhưng điều này sẽ không trở lại 22 của chính nó.

Nếu bạn đặt nó ở cuối, bạn vẫn có thể ghi đè lên các máy chủ đó nếu bạn cần 22 bằng cách đặt một giá trị khác lên trên nó. (Và bạn luôn có thể ghi đè lên dòng lệnh.)

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.