매번 포트 22뿐만 아니라 보조 포트를 시도하도록 ssh를 설정하는 방법은 무엇입니까?


9

로그의 소음을 줄이고 검색 가능성을 약간 낮추려는 노력의 일환으로 (그리고 공개 키 인증 만 허용하는 fail2ban의 맨 위에 있습니다.) 다른 포트로 설정 한 서버에서 sshd-ports를 정기적으로 변경합니다 (5492). 내 ssh 명령에 -p 5492를 추가하거나 각 특정 서버의 포트를 my에 추가합니다 ssh_config.

포트 22가 작동하지 않는 경우 포트 22와 포트 5492에 모두 연결하도록 ssh를 구성하는 방법이 있습니까?


1
나는 모호함을 통한 보안, VPN 설정 및 인터넷에 대한 열린 ssh 포트가 전혀없는 것을 선호합니다.
Rui F Ribeiro

2
@RuiFRibeiro 더 안전하지 않다는 데 동의합니다. 그러나 로그 파일에서 노이즈를 유지합니다. 포트 노킹을 사용하여 로그인 시도를 줄여 보안을 강화할 수도 있습니다.
Ned64

2
@RuiFRibeiro VPN 서버는 SSH 서버보다 안전합니까?
라일리

그것은 모두 구현에 달려 있습니다. 이전에는 이중화를 위해 2 개의 VPN 항목을 정의 ssh했으며 외부에 존재 하지 않았습니다 .
Rui F Ribeiro

2
모호함에 의한 보안은 특히 기회 주의적 공격자에 관한 좋은 설정 위에 좋은 추가 계층입니다.
rackandboneman

답변:


11

쉘 스크립트를 감쌀 수는 ssh있지만 ssh그렇게하지는 않습니다.

bash 함수를 사용하는 한 가지 방법은 다음과 ~/.bashrc같습니다.

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

그건 그렇고, 사용자가 포트 5492와 같은 프로세스를 수신하지 못하도록 시스템 서비스에 예약 된 root포트 를 사용하는 것이 좋습니다. ssh그렇지 않으면 중간에 사람을 놀려 로그인 데이터를 캡처 할 수 있습니다. 따라서 포트 <1024를 사용하십시오.


1
좋은 해결책입니다. 포트에 대한 좋은 참고!
라일리

5
실행 된 명령 이 0이 아닌 값 을 반환 하면 첫 번째 연결 성공하더라도 두 번째 연결 이 이루어집니다ssh . 사소한 예는 다음과 같습니다 ssh user@server false.
Kusalananda

1
@ Kusalananda 감사합니다, 나는 지금 썼다 command. 당신이 옳은대로 재귀를 피하고 싶었습니다.
Ned64

@Kusalananda가 언급 한 문제는 (종료) 특정 종료 상태를 테스트하여 피할 수 있습니다 ssh. 원격 명령 실패와 달리 ssh 오류가 있으면 255 상태로 종료됩니다. 따라서 command ssh -p 22 "$@"; if [ "$?" -eq 255 ]; then command ssh -p 5492 "$@"; fi작동합니다.
Gordon Davisson

10

sshMatch문서 자체는 ssh_config(5)예제에서 다소 희소하지만 문서화를 통해이 작업을 수행 할 수 있습니다 . 이 형식은 ssh_config(5)구문 의 한계에 의해 제한 되기는하지만 SSH 구성으로 복잡성을 푸시하려는 경우에 적합 할 수 있으며 원하는 결과를 위해 약간의 조정이 필요할 수 있습니다. 특히, 사용자 지정 포트를 설정할 수 없거나 이전 Match시도 에서 잘못 설정할 수 있습니다 . 이것이 아래에서 테스트 할 때 두 번 또는 기본값으로 한 번 설정되고 표준 기본값을 설정할 때 설정되지 않는 이유입니다.

# 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 주어진 포트에서 무언가가 응답하는지 확인하고 다음과 같이 보일 수 있습니다.

#!/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
.ssh / config의 if-then-else? 나는 그것을 믿지 않았을 것입니다!
Archemar

1

의 와일드 카드 함수를 사용 ~.ssh/config하여이 항목을 목록에 추가 할 수 있습니다.

Host *
Port 5492

그러나 이것은 그 자체로는 22로 떨어지지 않습니다.

마지막에 배치하면 다른 값을 위에 두어 22 필요했던 호스트에 대해 계속 무시할 수 있습니다. (그리고 당신은 항상 명령 행에서 그것을 무시할 수 있습니다.)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.