суббота, 24 ноября 2007 г.

custom ssh && knockd

Обычно у меня на серверах авторизация ssh только по ключам, но иногда бывает где нить нужно достучаться не имея ключей в наличии.
Придумал такую схему. Поставим knockd и по "стуку" по портам будем пускать sshd второй принимающий конекты с авторизацией по паролю.

1. Копируем и правим конфиг для второго sshd
/etc/ssh/sshd_config_pass
в нем меняем
port 1222
PasswordAuthentication yes
PidFile /var/run/sshd_pass.pid

2. Ставим knockd и настраиваем его примерно так
[options]
logfile = /var/log/knockd.log
interface = sis0 # внешний интерфейс

[openSSH]
sequence = 2223,2233,2333
seq_timeout = 30
command = /sbin/ipfw -q add 50000 pass proto tcp src-ip %IP% dst-port 1222 && sshd -f /etc/ssh/sshd_config_pass
tcpflags = syn

[closeSSH]
sequence = 2333,2233,2223
seq_timeout = 30
command = /sbin/ipfw -q delete 50000 pass proto tcp src-ip %IP% dst-port 1222 && kill `cat /var/run/sshd_pass.pid`
tcpflags = syn


Запускаем knockd
и пробуем.
После knock host 2223 2233 2333
в файрволе открывается порт 1222 для того IP с которого стучали, и запускается второй sshd с допустимой авторизацикй по паролю.

"Стучаться" можно и например telnet с любой машины. За 30 секунд успеть не трудно.
По "стуку" по портам 2333,2233,2223 порт файрвола закрывается, и sshd выключается.