Задать вопрос
@vasyaputin

Почему не работает автозагрузка в linux (другие способы автостарта ssh туннеля)?

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

1. Для этого я создал скрипт в init.d соответствии с образцом
sudo cp /etc/init.d/skeleton /etc/init.d/myscript && vi /etc/init.d/myscript

2. Отредактировал его, получилось так (скрипт работает, когда я запускаю его /etc/init.d/myscript start):
#! /bin/sh

### BEGIN INIT INFO

# Provides:          ssh
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Example initscript
# Description:       This file should be used to construct scripts to be
#                    placed in /etc/init.d.
### END INIT INFO

# Author: Foo Bar <foobar@baz.org>

. /lib/lsb/init-functions

# Function that starts the daemon/service

perform_start()
{
	log_daemon_msg "start tunnel"	
	sleep 20 && ssh root@5X.2XX.1XX.9X -R 5544:localhost:22  -i ~/.ssh/mykeys.pem
	return 0
}

# Function that stops the daemon/service

perform_stop()
{	
	log_daemon_msg "navernoe ne nuzhno"	
}

case "$1" in  
	start)
		perform_start
		;;
	stop)
		perform_stop
		;;
	*)
		echo "Usage: /etc/init.d/mysc {start|stop}"
		exit 3
		;;
esac

:


3. Добавил скрипт в уровни запуска вот так:

sudo update-rc.d myscript start 99 2 3 4 5 . stop 01 0 1 6 .

На что мне было отвечено:
using dependency based boot sequensing, что, как я нашел в гугле, является сообщением, а не ошибкой. (Хотя по инструкции, должна была последовать реакция Adding system startup for /etc/init.d/slave ...). Подозрение на этот этап.

4. Добавил права на выполнение вот так:
sudo chmod +x /etc/init.d/myscript

Автоматически не работает. Сам запускаю скрипт - работает. Логов загрузки в папке var/logs нет. При старте системы показываются скрипты, которые запускаются, моего скрипта там нет. Попробовал добавить свою строчку в конце последнего загружаемого скрипта - не работает.
Поставил sysv-tc-conf: мой скрипт там есть, уровни выставлены. Система bamt 1.3, это какой-то дебиан, как я понял. Папки /etc/init у меня в системе нет.

Мне очень нужно решить проблему автоподключения машины по ssh к серверу (она находится за nat) . Если есть соображения по моему методу или другие способы, с удовольствием выслушаю.
  • Вопрос задан
  • 7827 просмотров
Подписаться 3 Оценить 2 комментария
Решения вопроса 1
@vasyaputin Автор вопроса
Отчет для любителей детективов. Шерлок отдыхает.

В общем, не стартует система. То стартует, то не стартует, в зависимости от того, через сколько секунд отсчета ты выберешь систему для загрузки.

Запустился в фейлсейф режиме. Подключаюсь по ssh через терминал к серверу - подключается. Теперь через порт 5544 с домашнего компа подключаюсь через этот сервер к тому, колдовство над которым здесь обсуждалось. А мне выдается connection refused, хотя раньше всегда абсолютно все подключалось без проблем.

Иду обратно к объекту колдовства и замечаю, что в терминале перед подключением к серверу висит сообщение, что через порт 5544 ничего не проходит. Внимание, момент осенения. Понимаю, что порт 5544 уже используется. Но в crontab я все убрал! Так что же с портом? Так ведь он уже используется! Так значит изначальный скрипт работал все это время! Я-то думал, что если скрипт работает, то на рабочем столе должно вылезти окошко терминала с подключенным сервером. А оказывается, это все где-то в фоне происходит (вот прямо сейчас я не понимаю, как мне попасть в этот терминал, если он запускается в фоне, хорошо, что мне это не нужно). Тут все начинает распутываться, я понимаю, что проблемы с загрузкой системы были из-за интервала запуска autossh в 20 секунд. Т.е. если я успевал быстро войти в систему, то она загружалась, если я ждал 5 секунд, пока вход будет произведен автоматически, то там не успевало загрузиться ssh из init.d.

А теперь еще прикол. Из crontab при загрузке системы мой скрипт, оказывается, не выполняется, но выполняется другая программа (btsync). Я этого не знал и поэтому решил, что этот способ мне подходит. В то время, как по ssh подключение осуществлялось из скрипта из init.d через автозагрузку update-rc.d.
Вот так вот.
Ответ написан
Пригласить эксперта
Ответы на вопрос 8
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
-i ~/.ssh/mykeys.pem

Он ищет приватный ключ в домашнем каталоге текущего пользователя. Когда вы запускаете скрипт от себя -- в вашем, когда от init -- в /root
Ответ написан
Можно добавить в /etc/crontab (возможно также с помощью команды crontab -e) строчку:
@reboot root /etc/init.d/myscript
использовать "root", как и путь к скрипту, на ваше усмотрение.
Если ко времени запуска крона что-то еще не успевает подгрузиться, можно поступить так:
@reboot root sleep 60 && /etc/init.d/myscript
Ответ написан
Комментировать
@dnsaur
Прописать путь к запускаемому файлу в /etc/rc.local ?
Ответ написан
ky0
@ky0
Миллиардер, филантроп, патологический лгун
Попробуйте поменять sh на bash и везде поставить абсолютные пути.
Ответ написан
Комментировать
ZloyHobbit
@ZloyHobbit
В ~/ походу проблема, либо пропиши абсолютный путь, либо засунь команду куда-нибудь сюда: rus-linux.net/MyLDP/consol/hdrguide/rusman/profile.htm
Ответ написан
Комментировать
@vasyaputin Автор вопроса
Помог последний совет. Благодарю i_maltsev ! Я думал, всплывет окно терминала и все произойдет привычным образом. Поэтому много времени потратил, выясняя, какой именно из советов мне помог.
Ответ написан
Комментировать
@vasyaputin Автор вопроса
Всем спасибо, за то, что откликнулись.
Ответ написан
@inkvizitor68sl
Linux-сисадмин с 8 летним стажем.
update-rc.d script defaults
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы