Remote kommandon via ssh?

Tråden skapades och har fått 6 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • International user
  • 2005-07-05 17:06

Vill man lista en mapp på en annan dator via ssh kan man använda t.ex.

ssh admin@172.0.0.1 ls  /Volumes/Bilder/Wire/

vilket fungerar bra.

Ett annat exempel som fungerar är att använda 'ditto' för att kopiera mellan två datorer via ssh:

ditto -c --rsrc /Volumes/Arkiv/Wire/ -|ssh admin@172.0.0.1 ditto -x --rsrc - /Volumes/Bilder/Wire/

(mappen 'Wire' paketeras - och packas upp på andra sida pipen - innan den skickas för bibehålla HFS-metadata)

Men hur kan man göra mer avancerade kommandon remote. Till exempel kontrollera att en fil finns på plats. Något åt detta håll (men mitt exempel fungerar inte)

#Typ:
ssh admin@172.0.0.1  if [ -e  /Volumes/Bilder/Wire/Bild1.jpg ]; then echo 'ja'; fi

(OBS! jag vill inte kontrollera stdout, utan vill använda just 'if-satsen')

Själva "[]"-konstruktionen i en if-sats är en genväg som kommandotolken erbjuder, och den expanderas till ett anrop till kommandot "test". När du direktanropar ett program via ssh får du vara lite mer explicit, och helt enkelt köra "test" direkt:

if ssh admin@172.0.0.1 test -e /Volumes/Bilder/Wire/Bild1.jpg; then echo "ja"; fi

Det som händer då är att test-kommandot körs på den dator du fjärransluter till, och ssh vidarebefordrar det returnerade värdet från programkörningen. Du kan också använda "sh -c" för att göra mer avancerade saker, parametern "-c" gör att all efterföljande text körs som vilket shellscript som helst, och när det kört färdigt avslutar sh.

  • Medlem
  • International user
  • 2005-07-05 18:49

Tack Samuel! Tänk om alla svar på 99mac höll den här nivån...

  • Medlem
  • Svedala
  • 2005-07-06 21:51

Detta funkar ju också:

ssh <maskin> 'test -e /home/martin/minfil'
if [ $? = 0 ]; then
echo "Woho"!
else
echo "Attans..."
fi

Man tittar alltså på vilken exitkod man får från ssh (det ger alltid samma exitkod som programmet man körde) och går sedan vidare därifrån.
SSH är trevligt.

  • Medlem
  • International user
  • 2005-07-07 08:21

Här har jag ett annat problem som gäller remote commands via ssh. När jag kopierar över en fil till en annan host använder jag

ditto -c --rsrc Testbild.eps - | ssh 172.0.0.1 ditto -x --rsrc - Bilder

Hur kan jag i samma ssh-connection utföra mer kod i anslutning till koden ovan? Går det eller "avslutar" konstruktionen ovan med 'ditto' ssh-connectionen?

Normalt kan man ju t.ex. skriva

ssh 172.0.0.1 "ls -l;df;ipconfig getifaddr en0"

för att utföra dessa tre kommandon på remote host.

Senast redigerat 2005-07-07 08:41

Inga problem där heller, kör bara kommandona via sh -c:

ssh localhost sh -c "ls -l;df;ipconfig getifaddr en0"
  • Medlem
  • International user
  • 2005-07-07 09:09
Ursprungligen av Samuel K:

Inga problem där heller, kör bara kommandona via sh -c:

ssh localhost sh -c "ls -l;df;ipconfig getifaddr en0"

Men hur konstruerar man det ihop med

ditto -c --rsrc Testbild.eps - | ssh 172.0.0.1 ditto -x --rsrc - Bilder
1
Bevaka tråden