Lehetséges írni egy bash szkriptet, amelyet
- az A gépről indítanának, egy másik gépen jelentkezik be B gép ssh által (mind az A, mind a B gép Linux-Machines lenne),
- néhány fájlt átmásol a B gépre
- egy adott python parancsfájlt futtat egy python szkripten ezeken a gépeken.
- visszaviszi az eredményeket az A gépre
- kijelentkezik a B gépről.
Ez műszakilag kivitelezhető?
Válasz
Természetesen kivitelezhető:
scp file user@host: ssh user@host path_to_script scp user@host:file_to_copy ./
és ez …
De van egy probléma: háromszor kérik meg a jelszót. Annak elkerülése érdekében, hogy generáljon ssh kulcsokat, és engedélyezze a felhasználókat ezekkel a kulcsokkal. kulcsok futtatják az ssh-keygen -t rsa parancsokat, válaszolnak a kérdésekre, és másolják a nyilvános kulcsot a távoli gazdagépre (B gép) ~/.ssh/authorized_keys fájlba. A privát kulcsot a div id = “334398fac8″>
a helyi gépen (A).
Megjegyzések
Válasz
Minden lehetséges egyetlen ssh kapcsolat / munkamenet:
ssh user@host "cat > remote_dst; command; cat remote_src" < local_src > local_dst
Ez:
- Másolatok
local_src–remote_dst, - végrehajtja a
command, - Másolja a
remote_srcfájlt alocal_dstfájlba.
De ha command a stdout oldalon ír, az eredmény pedig a local_dst fájlban is szerepel. Ha command beolvassa a bemenetet a stdin ből, akkor megkapja és EOF.
Válasz
Bár ezt egyetlen ssh munkameneten belül megteheti, kicsit bonyolult a fájlok másolását a futó parancsokkal kombinálni.
A feladat megoldásának legegyszerűbb módja külön SSH munkamenetek futtatása a három művelethez:
rsync -a inputs/ machineB:inputs/ ssh machineB "some command -i inputs -o outputs" rsync -a machineB:outputs/ outputs/
Ehhez háromszor kell hitelesíteni a machineB-t. A többszörös hitelesítés elkerülésének ajánlott módja a kapcsolatmegosztási lehetőség használata az OpenSSH modern verzióiban: egyszer és mindenkorra indítson master kapcsolatot a B-vel, és hagyja, hogy az SSH automatikusan visszacsatoljon erre a master kapcsolatra. Add ControlMaster auto és egy ControlPath sort az ~/.ssh/config sorba, majd indítson el egy master kapcsolatot a háttérben, majd hajtsa végre a feladatait.
ssh -fN machineB # start a master connection in the background # Subsequent connections will be slaves to the existing master connection rsync -a inputs/ machineB:inputs/ ssh machineB "some command -i inputs -o outputs" rsync -a machineB:outputs/ outputs/
Az scp o használata helyett Ha rsync fájlok másolásához, könnyebb lehet a távoli fájlrendszert felcsatolni az SSHFS alá. Ez mellesleg gondoskodni fog a master kapcsolat létrehozásáról (feltéve, hogy “beállította a ~/.ssh/config -t a fentiek szerint).
mkdir /net/machineB sshfs machineB: /net/machineB cp -Rp inputs /net/machineB/ ssh machibeB "some command -i inputs -o outputs" cp -Rp /net/machineB/outputs .
cat file | ssh user@host 'cat > /destination/of/file; /path/to/script &>/dev/null; cat results' > /destination/of/resultsControlMaster=yesésControlPath=/path/to/socketfile, majd indítson el egy ssh kapcsolatot a-fparanccsal a háttér ssh futtatásához. Mondja meg az összes későbbi SSH-kapcsolatnak, hogy ugyanazt a socket fájlt használja.