Czy to możliwe, aby napisać skrypt bash
- zostałby uruchomiony z komputera A, loguje się na innym komputerze B przez ssh (oba komputery A i B byłyby Linux-Machines),
- kopiuje niektóre pliki na komputer B
- uruchamia skrypt Python na danym komputerze na danym skrypcie Python.
- przesyła wyniki z powrotem do maszyny A
- wylogowuje się z komputera B.
Czy to technicznie wykonalne?
bash
ssh
shell-script
Aufwind
źródło
źródło
cat file | ssh user@host 'cat > /destination/of/file; /path/to/script &>/dev/null; cat results' > /destination/of/results
ControlMaster=yes
iControlPath=/path/to/socketfile
, a następnie nawiązując jedno połączenie ssh z,-f
aby uruchomić ssh w tle. Poinformuj wszystkie kolejne połączenia SSH, aby używały tego samego pliku gniazda.Mogę zrobić wszystko w jednym
ssh
połączeniu / sesji:To:
local_src
doremote_dst
,command
,remote_src
dolocal_dst
.Ale jeśli
command
pisze dalejstdout
, wynik z również będzielocal_dst
. Jeślicommand
odczyta dane wejściowestdin
, otrzyma iEOF
.źródło
Chociaż możesz to zrobić w ramach jednej sesji ssh, nieco trudniej jest połączyć kopiowanie plików z uruchomionymi poleceniami.
Najłatwiejszym sposobem rozwiązania tego zadania jest uruchomienie osobnych sesji SSH dla trzech operacji:
Wymaga to trzykrotnego uwierzytelnienia na komputerze B. Zalecanym sposobem uniknięcia wielokrotnego uwierzytelniania jest skorzystanie z funkcji współdzielenia połączenia w nowoczesnych wersjach OpenSSH: nawiąż połączenie główne z B raz na zawsze i pozwól SSH automatycznie nałożyć połączenie na to połączenie główne. Dodaj
ControlMaster auto
i dodajControlPath
do swojego~/.ssh/config
, następnie uruchom połączenie główne w tle, a następnie wykonaj swoje zadania.Zamiast używać scp lub rsync do kopiowania plików, łatwiej jest zamontować zdalny system plików w SSHFS . Nawiasem mówiąc, zajmie się to ustanowieniem połączenia głównego (zakładając, że skonfigurowałeś swoje,
~/.ssh/config
jak wskazano powyżej).źródło