Onko mahdollista kirjoittaa bash-komentosarja, joka
- aloitettaisiin koneelta A, kirjautuu sisään eri kone B ssh: llä (molemmat koneet A ja B olisivat Linux-koneita),
- kopioi joitain tiedostoja koneeseen B
- suorittaa python-komentosarjan tietyllä python-komentosarjalla näillä koneilla.
- siirtää tulokset takaisin koneelle A
- kirjautuu ulos koneelta B.
Onko tämä teknisesti toteutettavissa?
Vastaus
Se on tietysti toteutettavissa:
scp file user@host: ssh user@host path_to_script scp user@host:file_to_copy ./
ja se …
Mutta on yksi ongelma: Sinulta kysytään salasanaa kolme kertaa. Voit välttää sen, että voisit luoda ssh-avaimia ja valtuuttaa käyttäjät näillä avaimilla.
Ssh: n luominen avaimet suorittavat ssh-keygen -t rsa
, vastaavat kysymyksiin ja kopioivat julkisen avaimen etäisäntään (kone B) ~/.ssh/authorized_keys
-tiedostoon. Yksityinen avain tulisi tallentaa ~/.ssh/id_rsa
paikallisessa koneessa (A).
Kommentit
Vastaa
Voin tehdä kaiken yksittäinen ssh
yhteys / istunto:
ssh user@host "cat > remote_dst; command; cat remote_src" < local_src > local_dst
Tämä:
- Kopiot
local_src
–remote_dst
, - Suorittaa
command
, - Kopioi
remote_src
tiedostoonlocal_dst
.
Mutta jos command
kirjoittaa stdout
, tuloksen on oltava myös local_dst
. Jos command
lukee syötteen osoitteesta stdin
, se vastaanottaa ja EOF
.
vastaus
Vaikka voit tehdä tämän yhden ssh-istunnon sisällä, on hieman hankalaa yhdistää tiedostojen kopiointi käynnissä oleviin komentoihin.
Helpoin tapa hoitaa tämä tehtävä on suorittaa erilliset SSH-istunnot kolmelle operaatiolle:
rsync -a inputs/ machineB:inputs/ ssh machineB "some command -i inputs -o outputs" rsync -a machineB:outputs/ outputs/
Tämä edellyttää todennusta machineB: lle kolme kertaa. suositeltava tapa välttää todennusta useita kertoja on käyttää yhteyden jakamismahdollisuutta OpenSSH: n nykyaikaisissa versioissa: aloita master-yhteys B: hen lopullisesti ja anna SSH: n automaattisesti olla kiinni kyseisessä pääyhteydessä. Lisää ControlMaster auto
ja ControlPath
-rivi ~/.ssh/config
, muodosta sitten pääyhteys taustalla ja suorita sitten tehtävät.
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/
Sen sijaan, että käyttäisit scp o: ta Kun tiedostot kopioidaan rsynkronoituna, etätiedostojärjestelmän asentaminen SSHFS: n alle voi olla helpompaa. Tämä huolehtii muuten pääyhteyden muodostamisesta (olettaen, että olet määrittänyt ~/.ssh/config
kuten yllä on mainittu).
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/results
ControlMaster=yes
jaControlPath=/path/to/socketfile
ja aloita sitten yksi ssh-yhteys-f
-toiminnolla taustan ssh: n suorittamiseksi. Käske kaikkia seuraavia SSH-yhteyksiä käyttämään samaa socket-tiedostoa.