Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Raspberry Pi - Dynamiczne IP oraz drugi serwer + zdalny dostęp

adnet.ag 03 Sep 2012 20:17 4155 26
  • #1
    adnet.ag
    Level 13  
    Witam,
    Nie jestem pewien ilu z Nas używa na co dzień Linux'a ale mam nadzieję, że ktoś pomoże.

    Więc:
    1) Mam Raspberry Pi podłączony przez port LAN1 do mojego routera ADSL.
    Router jak wiadomo zmienia IP dynamicznie "co jakiś czas"
    2) Mam wykupiony server i stronę WWW na home.pl - tu jest stałe IP

    Traz: na Raspberry Pi zrobiłem coś takiego
    Quote:
    lynx -nolist -dump http://www.whatismyip.net/ -accept_all_cookies > MyIPonADSL

    Wynik z tego jest taki:
    Quote:
    Your IP Number Is: 108.67.146.121




    Teraz:
    Mam już plik MyIPonADSL w katalogu /home

    Chciałbym:
    1) wykonywać w/w komendę lynx... co 30 minut oraz zapisywać do tego samego katalogu i tego samego pliku
    2) wysyłać np. co 60minut w/w plik na mój server w Home.pl poprzez FTP lub jakikolwiek inny trick

    Pytanie: Jak to ogarnąć - dodam, że: mam średnią wiedzę o Linux - język techniczny mile widziany
    Szukałem już na Forum Pi oraz napisałem podobnego posta ale nikt nie odpisał.

    Jeśli macie jakieś propozycję proszę o radę jak to zrobić.
    Jeśli piszę w złym miejscu proszę nie krzyczeć tylko powiedzieć dokąd się udać.
    Jeśli nie rozumiecie o co chodzi - proszę przeczytać ze zrozumieniem raz jeszcze.
    Do you have a problem with Raspberry? Ask question. Visit our forum Raspberry.
  • #2
    mickpr
    Level 39  
    Poczytaj o daemonie CRON i pochodnych.
    Cron - to ogólnie mówiąc daemon (program w tle), który uruchamia różne operacje w różnych odstępach czasu. Myślę, że wystarczy go użyć. + z twojego polecenia zrobić skrypt, który będzie uruchamiany.
  • #3
    adnet.ag
    Level 13  
    Dziękuję poczytam o Cron,
    co do skryptu to miałem podobny pomysł ale nie wiem na razie jak się za to zabrać bo nie wiem jak "wgrać" jakiś plik na zdalny ftp.
  • #4
    mickpr
    Level 39  
    Jak masz konsolę, możesz ten skrypt zrobić "ręcznie" z jej poziomu.
    Pewnie (jak każdy Linux/Unix) raspbery posiada minimum edytor Vi/Vim.

    Nie wiem dokładnie jak zaawansowany jest Linux na platformie Raspberry Pi, ale zapewne jest na niej FTP czy TFTP, a jeśli nie ma, to pewnie można jakiś sobie skompilować (o ile masz jakiś toolchain do tego celu).

    Mam pytanie - ile czekałeś na przysłanie Raspberry Pi?
  • #5
    adnet.ag
    Level 13  
    Zacznę od końca - na Raspberry Pi czekałem ponad 4 miesiące - tylko dla tego że zamówiłem w 1-wszy miesiąc od premiery, a otrzymałem około Czerwca/Lipca tego roku. Teraz jak go mam to zachowuję się jak dziecko :)

    z Vim jestem zaznajomiony, ale skryptów nie pisałem od czasów studiów.

    Zainstalowałem sobie sam paczke 'tftpd' wiec i tu jest spoko - z sieci LAN na FTP idzie sie logowac bez problemu.

    O cron troche dziś już czytałem ale próbować będę kiedy indziej się tym bawić.
  • Helpful post
    #6
    freetz_master
    Level 31  
    Witam,
    na linuksie nie ma czegoś, czego ktoś już nie wypróbował ;-)

    U mnie na Fritz!Box zrobiłem to tak

    1. zapisać skrypt o nazwie "ip.sh"
    2. zawartość
    Code:

    #! /bin/sh
    # go to 'techn'
    cd /var/media/ftp/uStor01/tech/

    # take the ip from dyndns-check
    wget http://checkip.dyndns.com/ 2>1 /dev/null
    cat index.html | awk '{print $6}'|cut -d"<" -f1 >ip.txt

    #put 2 web server
    ftpput -u USER -p PASSWORD yourdomain.eu /path/ip.txt ip.txt; rm -rf .temp
    rm -f 1

    3. ustawić w cron tab, aby się wykonywał co 3 minuty
    Code:

    3 * * * * sh /var/media/ftp/uStor01/tech/ip.sh


    Nie znam dobrze tego urządzenia, bo mam Fritz!Boxa ;-) ale zasada jest taka sama.
    Powinieneś miec na skrzynce: wget, cat, awk i ftpput.

    Ale u Ciebie to by mozna zrobić chyba tak
    Code:

    lynx -nolist -dump http://www.whatismyip.net/ -accept_all_cookies > MyIPonADSL.txt

    ftpput -u USER -p PASSWORD yourdomain.eu /path/MyIPonADSL.txt  MyIPonADSL.txt ; rm -rf .temp
    rm -f 1


    i wtedy potrzebowałbyś tylko ftpput.
  • #7
    adnet.ag
    Level 13  
    Witam,
    1st - primo. Kolega nademną dostał "pomógł"
    2nd - primo :) oto mój plik ip.txt

    Code:
    #!  /bin/sh
    
    # Lynx, get my IP number from server …
    lynx -nolist -dump http://www.whatismyip.net/ -accept_all_cookies > MyIP.txt

    # shrink file to one line
    cat MyIP.txt | head -3 | tail -1 | awk '{print $5}'

    # ftp upload to my server
    ftp-upload --debug --host server.home.pl --user username --password-fd=0 0</home/ftp-upl-pas /home/pi/MyIP.txt


    Teraz będę testował 'cron' i takie tam, napisze jak wszytko zadziała. Dziękuję raz jeszcze za pomoc. Podzielę się tym pomysłem na forum Pi i znów będzie " jacy to Ci Polacy są wspaniali i pomysłowi " :D
  • #8
    freetz_master
    Level 31  
    adnet.ag wrote:

    Code:

    # shrink file to one line
    cat MyIP.txt | head -3 | tail -1 | awk '{print $5}'



    Nie będę się wymądrzał, a może tak?
    Code:

    cat MyIP.txt |awk '/:/{print $5}'


    Acha, i jeszcze jedno. samo cat nic nie zmieni w pliku txt z numerem IP. IMHO powinno być
    Code:

    cat MyIP.txt |awk '/:/{print $5}' >MyShrinkedIP.txt

    i dopiero wtedy MyShrinkedIP.txt kopiować na serwer.
  • #9
    adnet.ag
    Level 13  
    Idąc krok dalej - jakim sposobem można zrobić aby wartość w pliku MyIP.txt dodawana była w kolejności w następnej linii np.

    mojeIP1
    mojeIP2
    mojeIP3 etc.

    gdzie mojeIPx to kolejne IP z crona
  • Helpful post
    #10
    freetz_master
    Level 31  
    Code:

    cat MyIP.txt |awk '/:/{print $5}' >>MyShrinkedIP.txt
  • #11
    adnet.ag
    Level 13  
    awk :) ostatnim razem korzystałem z tego nas studiach więc z głowy nico wypadło,

    próbowałem znacznika >> przed chwilą i nie działało, co zrobiłem to 1 >> 2 apotem 2 >> 1 i kiedy zrobiłęm cat 1 albo cat 2 to miałem tam tylko "1" albo "2".
  • #12
    freetz_master
    Level 31  
    Niemożliwe ;-)

    Dokładna komenda? 1:1
  • #14
    freetz_master
    Level 31  
    póki co 8081 otwarty, tylko nie wiem jeszcze jaki protokół...
  • #15
    adnet.ag
    Level 13  
    mam problem z cron teraz...

    Code:
     cron 30 * * * * sh /home/pi/ip.sh 
    
    cron: can't open or create /var/run/crond.pid: Permission denied

    sudo 30 * * * * sh /home/pi/ip.sh
    sudo: 30: command not found
    pi@raspberrypi ~ $ sudo crontab 30 * * * * sh /home/pi/ip.sh
    30: No such file or directory
    pi@raspberrypi ~ $ sudo crontab 59 * * * * sh /home/pi/ip.sh
    59: No such file or directory

  • #16
    mickpr
    Level 39  
    Brak "sudo" lub nie leży on w ścieżce (PATH)?
  • #17
    adnet.ag
    Level 13  
    Quote:
    pi@raspberrypi ~ $ ls
    Desktop ip.sh My_IP.txt MyIP.txt python_games
    pi@raspberrypi ~ $ sudo 59 * * * * ip.sh
    sudo: 59: command not found
    pi@raspberrypi ~ $ sudo cron 59 * * * * ip.sh
    cron: can't lock /var/run/crond.pid, otherpid may be 1670: Resource temporarily unavailable


    dalej nie wiem co robię źle
  • #18
    mickpr
    Level 39  
    Nie doczytałem, sorry.
    Co to za komenda "59"?
    sudo mówi, że jej nie znaleziono.
    Wygląda jakbyś wpisywał wiersz z crontab do lini komend, a to nie tak.

    W ostatnim wierszu cron "mówi", że już jest uruchomiony (na co sygnalizuje istniejący plik cron.pid) i dlatego zgłasza błąd.
  • #19
    freetz_master
    Level 31  
    adnet.ag wrote:

    pi@raspberrypi ~ $ sudo 59 * * * * ip.sh
    sudo: 59: command not found



    A możesz mi powiedziec, co ty robisz, bo z cronem to nie ma nic wspólnego.

    Oczywiście, że jest błąd, bo nie ma komendy 59, ty natomiast masz na mysli co 59 minut.
    Wpis dokonuje się w pliku konfiguracyjnym, do ktorego ma dostęp wyłącznie root.

    Ponadto musi byc uruchomiony daemon crona.

    Ja jestem z działki openSuSE i nie wiem, czy na Debianie czy raspberry, tez tam to jest w tym samym miejscu.

    Co pokazuje
    Code:

    cat /etc/crontab


    raspberry pi, 2 minuty szukania
    http://mitchtech.net/category/tutorials/raspberry-pi/

    Kawa na ławę (tak mawiala moja nauczycielka matemytki) jak dla Makjuzera ;-)
    Quote:

    Cron, the UNIX time-based job scheduler, is an easy way to run regular tasks on the Raspberry Pi (or other *nix). Cron is a daemon (like a Web server) that is used to execute commands or scripts automatically at a specified time and date interval. To use it, open the global crontab (cron table) for editing:
    Code:

    sudo crontab -e

    In the text editor, you’ll see a commented out section of text describing how to configure tasks with cron. To add your own task, simply add a line to the end of the file. For example, to run the updateIP.sh script above every hour:

    Code:

    59 * * * * sh /path/to/updateIP.sh



    podstawy...
  • #20
    adnet.ag
    Level 13  
    zrobiłem crontab -e
    oraz dodałem ten wpis do ostatniej linii, jak teraz sprawdzić lub wykonać to co jest w pliku cron.... ?
  • #21
    freetz_master
    Level 31  
    A co ty chcesz wykonywać? To się uruchamia samo, przecież tak chcesz...

    A dla spradzenia ustawia się wykonanie skryptu co minutę - myślenie/czytanie (tego co w linku) nie boli
    Code:

    * * * * * sh /path/to/updateIP.sh


    A sprawdzić możesz tak
    Code:

    wget http://kerryitservices.home.pl/MyIP.txt && cat MyIP.txt
  • #22
    adnet.ag
    Level 13  
    Myslenie, czytanie nie boli - niestety stycznosc z Windows przez ponad 20 lat robi swoje i to uczucie "double click" zostaje

    anyway... skrypt dziala - Dziekuje BARDZO za pomoc.
    Przemapowalem porty na routerze wiec mozna zrobic kolejny port scann albo nmap
  • #23
    freetz_master
    Level 31  
    W celu uniknięcia ataków słownikowych na root na serwerze ssh należy:

    1. zmienić standardowy port 22 na inny
    2. użytkownik root nie powinien mieć możliwości logowania z zewnątrz
    Code:

    dma@Phenom940:~/Download> ssh root(malpa)109.77.216.158
    The authenticity of host '109.77.216.158 (109.77.216.158)' can't be established.
    ECDSA key fingerprint is 9c:31:29:55:87:e3:b3:7a:01:2a:9e:09:56:21:25:46.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '109.77.216.158' (ECDSA) to the list of known hosts.
    root(malpa)109.77.216.158's password:
    Permission denied, please try again.
    root(malpa)109.77.216.158's password:
    Permission denied, please try again.
    root(malpa)109.77.216.158's password:
    Permission denied (publickey,password).
    dma@Phenom940:~/Download>
  • #24
    adnet.ag
    Level 13  
    Niechciał bym tutaj robić burzy, ale to jest tylko Raspberry Pi oraz system na karcie SD 4GB więc nie będę się tutaj "starać" o security - ustawiłem to tylko po to, żeby się logować zdalnie i bawić na Linuxie.
  • #25
    adnet.ag
    Level 13  
    Mam jeszcze jedno pytanie: jak dodać do wpisu datę i czas żeby końcowy wynik wyglądał następująco:

    data, czas, ip
    data, czas, ip
    itd.
  • Helpful post
    #26
    freetz_master
    Level 31  
    Code:

    cat MyIP.txt |awk '/:/{now=strftime("%T/%m/%d/%y")" IPv4: ";print now $5}' >>MyShrinkedIP.txt


    efekt (kolejnosc zmiennych czasu mozesz sobie dopasowac, jak Ci sie podoba):
    Code:

    dma@Phenom940:~> cat MyIP.txt |awk '/:/{now=strftime("%T/%m/%d/%y")" IPv4: ";print now $5}'
    17:21:21/10/17/12 IPv4: 94.219.117.68


    Acha, dodatkow zainteresuj sie ddclient, jest tez dla raspberry pi
    http://www.recantha.co.uk/blog/?p=18

    to nie musisz szukac hosta po IP tylko po dowolny darmowym serwisie dns.