У меня дома стоит компьютер (debian). На нем динамически меняющийся ip (меняется раз в несколько часов). Я хочу иметь возможность соединяться с данным компьютером по ssh с любой машины. Я написал программу на баш (программа уже работает)!
#!/bin/bash
cd /home/moilogin/prg
#сюда надо перейти
wget -q -O servdom.html http://2ip.ru/
ftp -n << EOF
open ftp.narod.ru
user moisite moiparol
delete servdom.html
put ./servdom.html
quit
EOF
wait 10m
#отсюда надо сделать переход
по моей задумке, каждые 10 минут на моем сайте moisite.narod.ru будет создаваться страница servdom.html, считывая которую, я буду знать текущий ip домашнего компьютера. Вопросы:
1. Можно ли как нибудь избежать использование сервиса 2ip.ru? Как узнать свой ip адрес без обращений к внешним сервисам?
2. Какой оператор в баш используется заместо goto? Не могу найти ничего подобного в командах.
3. Правильна ли моя идея и сам скрипт? Нельзя ли его сделать лучше?
В данном случае можно использовать бесконечный цикл.
что то он у меня не получается
выдает ошибку "неожиданный конец файла". Борюсь пока.
dyndns.org - во первых для сайтов, а во вторых какой смысл использовать внешний сервер (сервис)? Пока мой домашний компьютер будет работать - моя схема будет вполне работоспособна. А с dyndns я не смогу ssh доступ настроить.
3. Правильна ли моя идея и сам скрипт? Нельзя ли его сделать лучше?
Удобнее использовать DynDNS. На вашем компе крутится специальный демон (таких куча в любом дистрибутиве), который постоянно связывается с сервером DynDNS и автоматически обновляет IP, связанный с вашей учётной записью. Вам же достаточно связываться с SSH не по IP, а по доменному имени, вида блабла.dyndns.com.
#!/bin/bash
cd /home/moilogin/prg
while true
do
wget -q -O servdom.html http://2ip.ru/
ftp -n << EOF
open ftp.narod.ru
user moisite moiparol
delete servdom.html
put ./servdom.html
quit
EOF
sleep 10m
done
зы да и вместо полной странички 2ip.ru я бы просто в текстовый файл сбрасывал айпишник как нибудь так:
#!/bin/bash
cd /home/moilogin/prg
while true
do
wget -q -O servdom.html http://2ip.ru/
ftp -n << EOF
open ftp.narod.ru
user moisite moiparol
delete servdom.html
put ./servdom.html
quit
EOF
sleep 10m
done
зы да и вместо полной странички 2ip.ru я бы просто в текстовый файл сбрасывал айпишник как нибудь так:
Ага. Лично мне, например, всегда интересно, почему та или иная вещь у меня не работает, даже если необходимость в ней уже отпала. Вдруг у топикстартера есть такой же интерес (:
$ cat 1
#!/bin/bash
while true
do
ftp -n << EOF
quit
EOF
echo OK
sleep 1
done
$ ./1
OK
^C
$ cat 1
#!/bin/bash
while true
do
ftp -n << EOF
quit
EOF
echo OK
sleep 1
done
$ ./1
./1: line 9: warning: here-document at line 4 delimited by end-of-file (wanted `EOF')
./1: line 10: syntax error: unexpected end of file
скрипт не работал, потому как стояли пробелы перед eof. Таким образом делаю вывод, если в баш скриптах использовать пробелы, то будут всплывать непонятные ошибки.
скрипт не работал, потому как стояли пробелы перед eof. Таким образом делаю вывод, если в баш скриптах использовать пробелы, то будут всплывать непонятные ошибки.
Нет, надо просто внимательно читать мануалы. Строка должна совпадать с приведённой после "<<" полностью. К примеру, такой вариант вполне корректен:
А то я что то не понимаю, чего я не понимаю с отступами.
Вы не понимаете того, что строки после "...<<..." воспринимаются как есть. Если бы у них игнорировались начальные пробелы, то у вас бы не было возможности вывести эти пробелы.
Пример:
Т.е. все пробелы здесь воспринимаются "как есть", и если бы это было не так, у вас бы не было возможности добиться такого вывода.
Но если вам не нужны отступы в начале выходных строк, вы хотите использовать их просто как оформление, то есть другой синтаксис (обратите внимание на минус):
вопрос из той же оперы про мой скрипт. Сайт http://smart-ip.net/tools/ports-scan ясно показывает:
Найдены открытые порты:
Порт Сервис Описание
22 ssh SSH Remote Login Protocol
в настройка модема virtual server:
Name Protocol WAN Port Server Host Port Server IP Address
SSH TCP 22 22 192.168.1.10
ssh запущен.
а зайти по ssh с помощью putty я не могу
что дальше делать даже не знаю...
Проблема на стороне компа, где вы запускаете putty.
сторона компа. winxp официальная - нетбук. Что удивительно, но этот же putty соединяется с другим сервером по ssh. А именно с моим компом не соединяется. И что делать?
Когда вы пытаетесь подключиться по внешнему адресу, запрос направляется роутеру. А большинство "домашних" роутеров не транслирует порты "из локалки в локалку". Проброшенные порты видны только извне.
А большинство "домашних" роутеров не транслирует порты "из локалки в локалку". Проброшенные порты видны только извне.
а нет ли случайно какой либо опции в роутере-модеме, которая включает и отключает эту трансляцию. Я слабо помню когда именно, но я твердо уверен, что я заходил по ssh с нетбука на комп. Только вот потом я енял настройки в модеме-роутере. И какие я менял настройки я уже не помню.
тут был упомянут роутер.
получается, носителем внешнего адреса является именно он?
вот на нём тогда и следует настраивать dyndns-клиента.
ведь машина за роутером не знает текущего адреса, соответственно, ей нечего рассказать dyndns-у.
(понятно, что можно распарсить вывод какого-нибудь show-me-my-ip-сервиса, но мы же пытаемся сократить количество телодвижений?).