Я сделал tcpdump при подключении к моему серверу через SSH. Первое, что я вижу, это:
SSH-2.0-OpenSSH_5.3
Можно ли заставить сервер не отправлять его версию ssh?
Не без перекомпиляции исходного кода.
Он используется для согласования совместимости между сервером и клиентом.
Существует метод, описанный здесь и воспроизведенный для полноты, но я бы не рекомендовал его, так как его нужно будет повторять каждый раз при обновлении программного обеспечения.
Скопируйте файл /usr/sbin/sshd
в /tmp
.
# cp /usr/sbin/sshd /tmp
Найдите расположение текста OpenSSH в нем, используя команду strings
.
Ищите текст 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*
Удалите строку 521008 из вышеприведенного вывода с помощью команды dd
.
# 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.
Проверьте содержимое файла sshd.2 с помощью команды od.
# 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
Хотя это не очень элегантное или ремонтопригодное решение.