답변:
소스 코드를 다시 컴파일하지 않으면 안됩니다.
서버와 클라이언트 간의 호환성을 협상하는 데 사용됩니다.
여기 에 설명 되어 있고 완전성을 위해 재현 된 방법이 있지만 소프트웨어를 업데이트 할 때마다 반복해야하므로 권장하지 않습니다.
파일 /usr/sbin/sshd
을에 복사하십시오 /tmp
.
# cp /usr/sbin/sshd /tmp
strings
명령을 사용하여 텍스트에서 OpenSSH의 위치를 찾으십시오 . 출력에 SSH-2.0-OpenSSH_5.x
표시된 버전이므로 텍스트를 찾으십시오 telnet
.
# cd /tmp
# strings -t d -a -n 7 sshd | grep -i ssh-2
521008 OpenSSH-2.0*,OpenSSH-2.1*,OpenSSH_2.1*,OpenSSH_2.2*
dd
명령을 사용하여 위 출력에서 521008 라인을 제거하십시오 .
# dd if=./sshd bs=1 skip=521008 count=11 | od -A n -c
11+0 records in
11+0 records out
O p e n S S H - 2 . 0
11 bytes (11 B) copied, 0.000208606 s, 52.7 kB/s
# dd if=./sshd bs=1 count=521008 of=sshd.1
521008+0 records in
521008+0 records out
521008 bytes (521 kB) copied, 1.46733 s, 355 kB/s
# dd if=./sshd bs=1 skip=521008 count=11 of=sshd.2
11+0 records in
11+0 records out
11 bytes (11 B) copied, 0.00032878 s, 33.5 kB/s
# dd if=./sshd bs=1 skip=521008 count=999999999 of=sshd.3
131808+0 records in
131808+0 records out
131808 bytes (132 kB) copied, 0.368016 s, 358 kB/s
이제 OpenSSH_5.x가 잘리고 sshd.2 파일로 복사됩니다.
od 명령을 사용하여 sshd.2 파일의 내용을 확인하십시오.
# od -A n -c sshd.2
O p e n S S H _ 2 . 0
"ItsHidden"이라는 텍스트를 쓰고 sshd.2
이전과 이후의 파일 크기 변경을 확인하십시오.
# ls -l sshd.2 -rw-r--r-- 1 root root 11 May 6 14:11 sshd.2
# print -n ItsHidden > sshd.2
# ls -l sshd.2 -rw-r--r-- 1 root root 11 May 6 14:12 sshd.2
위의 모든 sshd 파일을 sshd.new에 결합하십시오.
# cat sshd.* > sshd.new
실행 권한 sshd.new를 부여하고 sshd 바이너리를 sshd.new로 바꾸십시오.
# chmod 755 ./sshd.new
# cp /usr/sbin/sshd /usr/sbin/sshd.bak
# rm /usr/sbin/sshd
# cp /tmp/sshd.new /usr/sbin/sshd
sshd 서비스를 다시 시작하고 telnet 명령으로 결과를 테스트하십시오.
# service sshd stop
# ps aux | grep -i sshd
# kill -9 <pid_sshd>
# service sshd restart
# telnet localhost 22
그러나 매우 우아하거나 유지 관리 가능한 솔루션은 아닙니다.
더 빠른 방법, 조심하면 ssh에서 작동합니다.
먼저 700 개의 루트 소유 실행 파일 bash 파일을 만듭니다. 나는 그것을 test.sh라고 불렀다. 내용:
#!/bin/bash
sleep 10
service sshd stop
sleep 10
sed -i.bak.$(date +%F.%s) 's/OpenSSH_5.3/Blocked_9.9/g' /usr/sbin/sshd
sleep 10
service sshd start
기본적으로 : 10 초 동안 잠자고 ssh 데몬을 중지하고 10 초 동안 닫고 sed를 사용하여 버전 문자열을 바꾸고 백업하는 동안 백업하십시오. 10 초 더 잠든 다음 sshd 서비스를 시작하십시오. service sshd stop 및 service sshd start 명령은 시스템에 대한 일부 사용자 정의가 필요할 수 있습니다 (예 : "service sshd stop"대신 "systemctrl stop sshd.service"일 수 있음). 원하는 버전 문자열을 지정해야합니다. 내 테스트는 OpenSSH 5.3을 사용하는 CentOS 6 상자를 사용했습니다. 이를 통해 ssh 세션에서 백그라운드 데몬으로 호출 할 수 있습니다. 즉각 종료해야합니다. 따라서 (루트처럼) 다음과 같이 호출하십시오.
nohup ./test.sh & exit 0
그리고 첨부 된 세션이 없는지 확인하십시오 (있는 경우 sshd 실행 파일이 사용 중이므로 편집하지 않습니다). 그런 다음 조금 기다렸다가 다시 연결해보십시오.
다음을 통해 작동하는지 테스트 할 수 있습니다.
echo "Hello" | nc [Server IP here] 22
버전 문자열도 가져옵니다.
물론 스크립트로 업데이트 후 호출하여 신속하게 차단을 다시 수행 할 수 있습니다. 버전 문자열이 처음에있는 이유 때문에이 방법은 권장되지 않지만 작동해야합니다.