Jak uruchamiać polecenia w trybie wsadowym przez ssh?

9

Jak uruchomić polecenia w trybie wsadowym przez ssh? To znaczy, jaki jest odpowiednik sshpolecenia sftp -b <filename> <hostname>?

Mam zestaw poleceń, które chcę uruchomić na zestawie hostów łączących się ssh. Na koniec sftpprzechowuję polecenia w pliku filenamei łączę się z hostem i uruchamiam polecenia za pomocą wcześniej wspomnianego polecenia.

Czy coś takiego jest możliwe ssh?

Srikanth
źródło
Przeszedłem przez to pytanie. Ale nadal nie mogłem wymyślić, jak uruchomić polecenia w trybie wsadowym.
Srikanth,
I czy ktoś może utworzyć tag #batchmode i otagować to pytanie?
Srikanth,

Odpowiedzi:

9

Popraw mnie, jeśli się mylę, ale wydaje się, że chcesz uruchamiać regularne polecenia powłoki na zdalnym serwerze, na którym skrypt jest lokalny.

#!/bin/sh
trap "rm -f /tmp/sendonssh.$$.*" 0 1 2 3 15
# commands to run on the remote server
cat <<'EOF' >> /tmp/sendonssh.$$.sh
mkdir -p /tmp/foobar.$$
mv $HOME/xyzzy /tmp/foobar.$$
chmod 640 $HOME/xyzzy
EOF
# call for each argument
for userhost in "$@"; do
    errorout=`ssh -aTxo BatchMode=yes $userhost /bin/sh -s < /tmp/sendonssh.$$.sh 2>&1`
    rc=$?
    if [ $rc -ne 0 ]; then
        echo "Error: $userhost: $errorout"
        exit $rc
    fi
done

Czynię to z niektóre aplikacje „Zdalne wykonanie” w moim środowisku testowym przy użyciu Python zamiast płaszcza: ssh $userhost python < $pythonscriptfilename.

Arcege
źródło
Dziękuję za odpowiedź. Tak to wygląda. Trochę go poprawiam i próbuję teraz.
Srikanth,
7

Odpowiednikiem SSH sftp -b <filename> <hostname>byłoby:

ssh -o BatchMode=yes <hostname> sh -s < "<filename>"

MattBianco
źródło
3

Co powiesz na prostotę i uruchomienie pliku „wsadowego” na innym komputerze?

  1. użytkownik pliku wsadowego scp @ pc
  2. ssh użytkownik @ pc plik wsadowy
  3. ssh użytkownik @ pc rm plik wsadowy

Plik wsadowy byłby normalnym skryptem powłoki, więc składnia jest dobrze znana.

Johan
źródło
0

man expect? : \

ale to nie jest idealny sposób.

LanceBaynes
źródło
Cześć Johnny8888, jestem na serwerze Solaris i nie ma ręcznego wpisu, którego można się spodziewać. Czy potrafisz wyjaśnić swoją odpowiedź?
Srikanth,
@Srikanth linux.die.net/man/1/expect
Michael Mrozek
@ Srikanth: expectjest przeznaczony do interakcji z programami, które oczekują działania na terminalu. Nie ma to związku z problemem uruchamiania poleceń przez ssh.
Gilles „SO- przestań być zły”
0

być może

ssh user@host sh -c "$(<filename)"
Glenn Jackman
źródło
0

Możesz użyć poleceń wymuszonych przez ssh.

Są one powiązane z określonym kluczem. Po przeprowadzeniu uwierzytelnienia za pomocą tego klucza to polecenie jest uruchamiane i połączenie zostaje zerwane. Zaletą tego podejścia jest zwiększone bezpieczeństwo, ponieważ w takim przypadku klucz nie może zostać użyty do uzyskania dostępu do powłoki logowania.

Faheem Mitha
źródło
0

Inną opcją dla skryptu Arcege byłaby funkcja Bash:

sshbatch() {
  # Expect at least 2 parameters, if less are provided print help
  if [[ ${#@} -lt 2 ]]; then
    printf 'Usage: sshbatch [user@]host... input_file\n'
  else
    while read -r -u "$fd" host; do
      # Check if the last parameter is a readable file, else print error and exit
      [[ -r ${@:(-1)} ]] || { printf "The file ${@:(-1)} is not readable!\n"; break; }
      # Run remote bash from the file given in the last parameter
      ssh -o BatchMode=yes "$host" bash -s < "${@:(-1)}"
      # Read host list from 1st to next to last parameters
    done {fd}< <(printf '%s\n' "${@:1:${#@}-1}")
  fi
}

Nie używam -Topcji ssh , ponieważ nie działa z nią we wszystkich przypadkach.

Ten skrypt używa rozszerzenia parametrów w tablicy parametrów pozycyjnych $@:

  • "${@:(-1)}" rozwija się do ostatniego parametru (dosłownie od początku do końca)
  • "${#@}" rozwija się do liczby parametrów pozycyjnych
  • "${@:1:${#@}-1}" rozwija się do listy wszystkich parametrów od pierwszego do następnego do ostatniego (dosłownie liczba parametrów minus jeden).
gadamiak
źródło
Nie jestem zbyt dobry w takich rozszerzeniach zmiennych, czy mógłbyś dodać coś więcej o tym, co się dzieje? Twoje zdrowie.
Guy
@ Facet, proszę bardzo - skomentowałem kod i dodałem wyjaśnienie dotyczące rozszerzania parametrów
gadamiak