로그의 노이즈를 줄이고 검색 가능성을 약간 줄이기 위한 노력의 일환으로(fail2ban 외에 공개 키 인증만 허용하는 등) 저는 종종 제가 설정한 서버의 sshd 포트를 다른 포트로 변경합니다. 5492라고 말해보세요. 현재 ssh 명령에 -p 5492를 추가하거나 각 특정 서버의 포트를 ssh_config
.
포트 22가 작동하지 않으면 포트 22와 포트 5492에 연결을 시도하도록 SSH를 구성할 수 있습니까?
답변1
쉘 스크립트를 래핑할 수 있지만 ssh
자체적 ssh
으로는 그렇게 할 수 없습니다.
Bash 기능을 사용하는 한 가지 방법은 다음과 같습니다 ~/.bashrc
.
function ssh() { command ssh -p 22 "$@" || command ssh -p 5492 "$@"; }
그건 그렇고, 사용하는 것이 좋습니다root
- 예약된 포트예를 들어 시스템 서비스의 경우 ssh
사용자가 포트 5492에서 수신 대기하는 프로세스를 방지합니다. 그렇지 않으면 중개자 역할을 하여 잠재적으로 로그인 데이터를 캡처할 수 있습니다. 따라서 1024보다 작은 포트를 사용하십시오.
답변2
ssh
Match
이는 로그 자체를 통해 수행할 수 있습니다.ssh_config(5)
문서의 예제는 다소 드물지만. SSH 구성에 복잡성을 추가하려는 경우 이 형식이 적합할 수 있지만 구문에 의해 제한되고 ssh_config(5)
원하는 결과를 얻기 위해 약간의 조정이 필요할 수 있습니다. 맞춤 포트를 설정할 수 없거나 이전 시도에서 잘못 설정되었을 수 있다는 점은 주목할 가치가 있습니다 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
답변3
와일드카드 기능을 사용하여 ~.ssh/config
이 항목을 목록에 넣을 수 있습니다.
Host *
Port 5492
그러나 그 자체로는 22로 되돌아가지 않습니다.
마지막으로 22개가 필요한 경우에도 그 위에 다른 값을 입력하여 해당 호스트를 재정의할 수 있습니다. (언제든지 명령줄에서 이를 재정의할 수 있습니다.)