Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2020-04-09 15:59:24

  DeWu - Użytkownik

DeWu
Użytkownik
Zarejestrowany: 2013-03-26

Skrypt bash

Hej, stworzyłem sobie taki prosty skrypcik do łączenia się z urządzeniami przez SSH:

Kod:

#!/bin/bash
file=/usr/local/bin/mtcmd.lists/mt.list

if [[ -z $1 ]];
then
    read -p "Wprowadź komendę: " cmd
else
    cmd=$1
fi

while IFS= read -r line;
do
    ip=`echo $line | cut -f1 -d " "`
    name=`echo $line | cut -f2 -d " " | tr -d "#"`
    printf "[$name] "
    ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@$ip "$cmd" 2> /dev/null
done < $file

W pliku /usr/local/bin/mtcmd.lists/mt.list mam IPki w takiej strukturze:

Kod:

192.168.111.32 #ROUTER1
192.168.111.29 #ROUTER2
192.168.15.1 #ROUTER3
192.168.107.1 #ROUTER4
10.10.0.2 #ROUTER5

Dlaczego po pierwszym połączeniu ssh wychodzi mi z całej pętli? Kiedyś miałem tylko same IPki w pliku mt.list a pętla wyglądała tak:

Kod:

for ip in $(cat /usr/local/bin/mtcmd.lists/mt.list)
do
    printf "[$ip] "
    ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null admin@$ip "$cmd" 2> /dev/null
done

i wszystko pięknie banglało. Co ciekawe, gdy w pliku umieszczę dwa IP routerów, z którymi nie da się połączyć przez SSH a dopiero z trzecim uda się nawiązać połączenie to w odpowiedzi dostaję:

Kod:

root@serwer:[/usr/local/bin]: mtcmd "/system routerboard print"
[ROUTER1] [ROUTER2] [ROUTER3]        routerboard: yes
             model: CCR1036-12G-4S
     serial-number: xxxxx
     firmware-type: tilegx
  factory-firmware: 3.09
  current-firmware: 6.43.4
  upgrade-firmware: 6.46.4

root@serwer:

i po udanym połączeniu SSH wraca do konsoli

Offline

 

#2  2020-04-10 14:41:47

  seler - Użytkownik

seler
Użytkownik
Zarejestrowany: 2012-05-15

Re: Skrypt bash

dodaj parametr -n do komendy ssh


a to feler westchnął seler

Offline

 

#3  2020-04-10 17:17:34

  DeWu - Użytkownik

DeWu
Użytkownik
Zarejestrowany: 2013-03-26

Re: Skrypt bash

Działa, dzięki!

Offline

 

#4  2020-12-23 10:25:37

  DeWu - Użytkownik

DeWu
Użytkownik
Zarejestrowany: 2013-03-26

Re: Skrypt bash

Temat powrócił. Łączę się w petli z innymi routerami, które (nie wiedzieć czemu) po dodaniu opcji -n odmawiają połączenia (Komunikat Only cli connections are allowed to the AP) a bez -n jak wiadomo, wychodzi z pętli.

Czy jest jakiś inny sposób na rozwiązanie tego zagadnienia?

Offline

 

#5  2020-12-23 22:07:17

  seler - Użytkownik

seler
Użytkownik
Zarejestrowany: 2012-05-15

Re: Skrypt bash

Spróbuj najpierw odpalić w terminalu prostą komendę, np. :

Kod:

ssh user@iproutera ls

i zobacz czy zadziała bez zająknięcia. Coś mi się wydaje, że host woła o jakieś hasło, czyli nie ma skonfigurowanego logowania na samych kluczach. Co to za router i jaki jest na nim system?

A opcja -n działa jak pisze w manualu:

-n      Redirects stdin from /dev/null (actually, prevents reading from
             stdin).  This must be used when ssh is run in the background.  A
             common trick is to use this to run X11 programs on a remote ma‐
             chine.  For example, ssh -n shadows.cs.hut.fi emacs & will start
             an emacs on shadows.cs.hut.fi, and the X11 connection will be au‐
             tomatically forwarded over an encrypted channel.  The ssh program
             will be put in the background.  (This does not work if ssh needs
             to ask for a password or passphrase; see also the -f option.)

Czyli po prostu tak jak komenda:

Kod:

ssh host </dev/null

Ostatnio edytowany przez seler (2020-12-23 22:11:32)


a to feler westchnął seler

Offline

 

#6  2020-12-24 14:11:08

  DeWu - Użytkownik

DeWu
Użytkownik
Zarejestrowany: 2013-03-26

Re: Skrypt bash

Jest to SCALANCE W1750D.

Kod:

ssh user@iproutera komenda

działa bez zająknięcia. Nie loguje się na samych kluczach, używam sshpass. Zarówno sshpass -n jak i ssh -n działa tak samo (Only cli connections are allowed to the AP)

Offline

 

#7  2020-12-24 20:28:05

  seler - Użytkownik

seler
Użytkownik
Zarejestrowany: 2012-05-15

Re: Skrypt bash

Tu masz alternatywne rozwiązanie z ssh bez parametru -n, z użyciem niestandardowych deskryptorów:

Solution

At least in bash, you can have read use a different file descriptor.

Kod:

while read -u10 HOST ; do ssh $HOST "uname -a" ; done 10< servers.txt
#          ^^^^                                       ^^

ought to work. 10 is just an arbitrary file number I picked. 0, 1, and 2 have defined meanings, and typically opening files will start from the first available number (so 3 is next to be used). 10 is thus high enough to stay out of the way, but low enough to be under the limit in some shells. Plus its a nice round number...

https://unix.stackexchange.com/questions/107800/usi … 107801#107801

Ostatnio edytowany przez seler (2020-12-24 20:29:00)


a to feler westchnął seler

Offline

 

#8  2020-12-28 12:13:37

  DeWu - Użytkownik

DeWu
Użytkownik
Zarejestrowany: 2013-03-26

Re: Skrypt bash

Super, do pełni szczęścia potrzebowałbym jeszcz jak sprawdzic, czy wszystkie elementy tablicy w bashu mają wartośc true i skrypt będzie śmigał jak tralala.

Offline

 

#9  2020-12-28 20:40:52

  seler - Użytkownik

seler
Użytkownik
Zarejestrowany: 2012-05-15

Re: Skrypt bash

No więc trzeba oczywiście przeiterować wszystkie elementy tablicy i sprawdzić każdy z nich, np.

Kod:

(
    for element in "${tablica[@]}"; do
    if [[ "$element" != true ]]; then
        exit 1
    fi
    done
)

[[ $? -eq 0 ]] && echo "wszystko ok"

a to feler westchnął seler

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Możesz wyłączyć AdBlock — tu nie ma reklam ;-)