LINUX.ORG.RU

[dropbear] Перезапуск ssh


0

1

Есть железка, в которой стоит dropbear в качестве ssh-сервера. Железка получает сеть по dhcp, который иногда выключается, потом, когда он появляется, железка получает адрес, пингуется и работает, но ssh-сервер видимо теряет биндинг и при попытке зайти на него говорит это:

ssh_exchange_identification: Connection closed by remote host

Перезапуск сети на железке не помогает, приходится только полностью ее ребутить. Можно ли написать скрипт, который будет при появлении сети передергивать ssh-сервер?
Платформа:
root@dreambox:~> uname -a
Linux dreambox 2.6.9 #1 Sat Sep 6 12:54:18 CEST 2008 ppc unknown
root@dreambox:~> cat /proc/cpuinfo 
processor	: 0
cpu		: STBx25xx
clock		: 252MHz
revision	: 9.80 (pvr 5151 0950)
bogomips	: 250.36
machine		: Dream Multimedia TV Dreambox
plb bus clock	: 63MHz

★★

Какой там dhcp-клиент?
У них (dhclien точно есть) обычно бывают так называемые событийные хуки (скрипты вызываемые по определённым событиям). Можно дописать туда перезапуск дропбира при получении адреса.

imul ★★★★★
()
Ответ на: комментарий от imul

udhcpcd, version 0.9.9-pre
Он простой как валенок - конфига нету, хостнейм берет из /var/etc/hostname

root@dreambox:~> cat /var/etc/hostname 
dreambox
root@dreambox:~> ps ax | grep dhcp
  220 root        528 S   /bin/udhcpc --hostname=dreambox  --foreground 
и еще
root@dreambox:~> ls -la /bin/udhcpc 
lrwxrwxrwx    1 root     root            7 Oct 24  2008 /bin/udhcpc -> busybox

Fletch ★★
() автор топика
Ответ на: комментарий от Fletch

У меня идеи кончились. Разве что по крону раз в минуту проверять. Если нет айпишника, то завершить дропбир, если есть айпишник, то поднять дропбир. С поднятым дропбиров же вторая копия не запустится?

imul ★★★★★
()
Ответ на: комментарий от imul

А хз, напишу скрипт, если сети нет - останавливаем дропбира, если появилась - поднимаем.
Жаль конечно, что так безыдейно и нету никакой обработки ifup/ifdown, но видимо это у многих эмбеддед-линуксов такое, как следствие

root@dreambox:~> df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/root                 3.9M      3.9M         0 100% /
/dev/mtdblock/1           2.8M   1012.0k      1.8M  36% /var

Fletch ★★
() автор топика
Ответ на: комментарий от Fletch

но видимо это у многих эмбеддед-линуксов такое, как следствие

:-)))

Как идея: Учитывая:

                /*
                 * From "man udhcpc":
                NOTES
                       udhcpc responds to the following signals:
                       SIGUSR1
                              This signal causes udhcpc to renew the current lease or,
                              if it does not have one, obtain a new lease.
                       SIGUSR2
                              This signal caused udhcpc to release the current lease.
                */

можно написать скрипт, который висит в бэкграунде и каждые пару секунд посылает SIGUSR1 udhcpc. udhcpc запущен постоянно. в default.script того самого udhcpc можно запускать/останавливать ssh. Но по-моему это тольк workaround. настоящая причина ssh поведения не ясна...

velikS
()
Ответ на: комментарий от velikS

кстати, да есть скрипт:

root@dreambox:~> cat /share/udhcpc/default.script    
#!/bin/sh

# udhcpc script edited by Tim Riker <Tim@Rikers.org>

[ -z "$1" ] && echo "Error: should be called from udhcpc" && exit 1

RESOLV_CONF="/etc/resolv.conf"
[ -n "$broadcast" ] && BROADCAST="broadcast $broadcast"
[ -n "$subnet" ] && NETMASK="netmask $subnet"

case "$1" in
	deconfig)
		/sbin/ifconfig $interface 0.0.0.0
		;;

	renew|bound)
		/sbin/ifconfig $interface $ip $BROADCAST $NETMASK

		if [ -n "$router" ] ; then
			echo "deleting routers"
			while route del default gw 0.0.0.0 dev $interface 2>/dev/null ; do
				:
			done

			metric=0
			for i in $router ; do
				route add default gw $i dev $interface metric $((metric++))
			done
		fi

		echo "# Generated by udhcpc" > $RESOLV_CONF
		[ -n "$domain" ] && echo search $domain >> $RESOLV_CONF
		for i in $dns ; do
			echo adding dns $i
			echo nameserver $i >> $RESOLV_CONF
		done
		;;
esac

exit 0
Строку перезапуска стоит ставить в последнем цикле for?
udev'a конечно же нету.

Fletch ★★
() автор топика
Ответ на: комментарий от Fletch

Строку перезапуска стоит ставить в последнем цикле for?

Типа того. Но это только - идея. Наверняка есть и лучшие варианты. Кстати, скрипт почему-то не полный. Есть ещё:

	leasefail|nak)

        Bla-Bla

		;;

На тот случай, если DHCP не получил айпи. В этом месте можно останавливать SSH. Кстати, по -s можете подсунуть свой скрипт, а не дефолтный (man udhcpc).

udev'a конечно же нету.

Почему - конечно? У меня он есть )) Есть тогда такая минифишка, как ifplugd. Его было бы лучше взять, чем писать «дергающий сигналом» скрипт.

velikS
()
Ответ на: комментарий от pekmop1024

Прописывание статики не вылечит дропбира от вышеуказанной болячки при пропадании сети.
Ну и привык я так сетью управлять, когда все железки приходят ко мне, а я им уже могу статическую аренду дать и выяснить, что у меня вообще в сети болтается. В сети на статике тяжело вести учет железа, если сразу не записал - забываешь, как правило. Ну и само собой, конфликты адресов могут случаться.

Fletch ★★
() автор топика
Ответ на: комментарий от Fletch

Прописывание статики не вылечит дропбира от вышеуказанной болячки при пропадании сети.

С чего ты решил? При статическом IP при пропадании сети dhcpcd (или что там за клиент живет, не суть) не будет передергивать почем зря интерфейс -> получаем совершенную индиффирентность к пропаданию сети дропбира и остальных слушающих порты сервисов, ибо ДЛЯ НИХ сеть пропасть не может.

Ну и привык я так сетью управлять

А, так тебе баловаться, а не проблему решить.

Ну и само собой, конфликты адресов могут случаться

Просто пропиши за девайсом на dhcp-сервер его адрес, но назначай его на девайсе статически. И не забудешь, и конфликтов не будет.

pekmop1024 ★★★★★
()
Ответ на: комментарий от pekmop1024

А, так тебе баловаться, а не проблему решить.

Мне надо, чтобы устройство работало правильно в нужной мне конфигурации.

Fletch ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.