Script som startar Terminal och skapar SSH-anslutning

Tråden skapades och har fått 10 svar. Det senaste inlägget skrevs .
1

Hej, har ett arbetsflöde som jag skulle vilja automatisera lite, men har ingen aning hur. Så tänkte kolla om någon här har några idéer.

Det jag vill göra är följande:
* Läs filen adfa.txt på skrivbordet (exempel)
* Ta första raden, spara in en variabel, $var
* Radera filen adfa.txt
* öppna terminal
* utföra kommandot - 'ssh -l user host -p port'
* utföra kommandot 'workFtp' (ett alias på linuxburken som skapar en ftp-anslutning till vår ftp på arbetet
* utföra kommandot 'cd /to/dir/'
* utföra kommandot - 'mirror $var' (som då tankar hem det som stod i filen adfa.txt)
* När det är klart ska terminal stängas

Ja, ungefär så. Är det ens genomförbart?

Tänker man om lite så borde det här ge samma resultat:

scp ~/Desktop/adfa.txt sshuser@sshserver:.
ssh sshuser@sshserver -p sshport "curl -T adfa.txt ftp://ftpserver/path/ --user myname:mypassword"
rm ~/Desktop/adfa.txt

Öppna automator, skapa ett arbetsflöde med "Kör kommandotolksscript"-komponenten, klistra in kommandona, och spara sedan som ett program. Du behöver också styra upp nyckel-autentisering mot SSH-servern, vilket det finns gott om material kring på nätet.

Ursprungligen av irrelogical:

Tänker man om lite så borde det här ge samma resultat:

scp ~/Desktop/adfa.txt sshuser@sshserver:.
ssh sshuser@sshserver -p sshport "curl -T adfa.txt ftp://ftpserver/path/ --user myname:mypassword"
rm ~/Desktop/adfa.txt

Öppna automator, skapa ett arbetsflöde med "Kör kommandotolksscript"-komponenten, klistra in kommandona, och spara sedan som ett program. Du behöver också styra upp nyckel-autentisering mot SSH-servern, vilket det finns gott om material kring på nätet.

Supertack, men eftersom jag är helt noob på dehär, så får du gärna förklara vad koden gör. scp tex?

Ursprungligen av yabbah:

Supertack, men eftersom jag är helt noob på dehär, så får du gärna förklara vad koden gör. scp tex?

Kör kommandot "man scp" i terminalen så får du upp hjälp-sidan (manualen) för scp, som är det vanliga cp-kommandot (kopiera fil), fast över SSH till en annan dator. Det funkar såklart med andra kommandon också, t ex "man ls", "man defaults", etc.

ssh-raden kör kommandot inom citationstecken på datorn som man SSH'ar till, istället för att öppna upp en terminal. Curl är i sin tur ett kommando för att ladda upp/ner filer över HTTP och FTP.

  • Medlem
  • Sollentuna
  • 2011-09-05 14:29
-T/--upload-file <file>
              This transfers the specified local file to the  remote  URL.  If
              there is no file part in the specified URL, Curl will append the
              local file name. NOTE that you must use a trailing / on the last
              directory  to really prove to Curl that there is no file name or
              curl will think that your last directory name is the remote file
              name to use. That will most likely cause the upload operation to
              fail. If this is used on a HTTP(S) server, the PUT command  will
              be used.

              Use  the file name "-" (a single dash) to use stdin instead of a
              given file.  Alternately, the file name "."  (a  single  period)
              may  be  specified  instead  of "-" to use stdin in non-blocking
              mode to  allow  reading  server  output  while  stdin  is  being
              uploaded.

              You can specify one -T for each URL on the command line. Each -T
              + URL pair specifies what to upload and to where. curl also sup-
              ports "globbing" of the -T argument, meaning that you can upload
              multiple files to a single URL by using the  same  URL  globbing
              style supported in the URL, like this:

              curl -T "{file1,file2}" http://www.uploadtothissite.com

              or even

              curl -T "img[1-1000].png" ftp://ftp.picturemania.com/upload/

Nästan där, skulle jag säga. Du agerar inte på innehållet i filen utan faktiskt för äver själva filen. Men det är något sådant som jag också skulle föreslå med SSH.

Tror ni missförstod mitt script lite, om adfa.txt innehåller tex 'Produktkatalog.20110905_rev6.pdf', som alltid ligger i en katalog med samma namn, men utan filändelse. Så vill jag spara den informationen i en variabel, eller på annat sätt hämta den med kommandot 'mirror Produktkatalog.20110905_rev6' som används i lftp.

Jag kan inte köra det direkt på Macen utan måste först in på min linuxmaskin för att göra det, därav ssh'n. Beror på VPN-uppkopplingar och lite annat.

Hoppas ni förstår bättre nu

  • Medlem
  • Stockholm
  • 2011-09-05 16:31
Ursprungligen av yabbah:

Tror ni missförstod mitt script lite, om adfa.txt innehåller tex 'Produktkatalog.20110905_rev6.pdf', som alltid ligger i en katalog med samma namn, men utan filändelse. Så vill jag spara den informationen i en variabel, eller på annat sätt hämta den med kommandot 'mirror Produktkatalog.20110905_rev6' som används i lftp.

För att gå igenom varje rad i ett vanligt text dokument med shell script kan du göra så här:

Citat:

while read line; do echo $line ; done < adfa.txt

Givetvis byter du ut echo mot ett relevant kommando för ditt ändamål.

  • Medlem
  • Sollentuna
  • 2011-09-05 15:14

Du ska inte behöva ta dig till VPN-tunnelns ändpunkt för att använda den. Har du korrekt uppsatta routingtabeller ska det fungera från din Mac också.

Ursprungligen av frazze:

Du ska inte behöva ta dig till VPN-tunnelns ändpunkt för att använda den. Har du korrekt uppsatta routingtabeller ska det fungera från din Mac också.

Jo fast grejen är att Macen är uppkopplad med VPN (anonine), och den IPn tillåts inte på jobbets ftp. Linuxburken är direktuppkopplad mot mitt bredband.

yabbah: Görs VPN-anslutningen i aliaset workFtp? Om inte så fungerar arbetssättet jag föreslog, då FTP-överföringen mha Curl görs från linuxmaskinen. (därav att man först kopierar filen dit med scp, och sedan kör curl på den maskinen)

Btw, mirror-kommandot går inte att använda så som du skriver i första inlägget, utan används för att spegla vald mappstruktur mellan den lokala datorn och servern. Mao så måste du ändå föra över filen till linuxmaskinen innan du kan använda lftp.

Ursprungligen av irrelogical:

yabbah: Görs VPN-anslutningen i aliaset workFtp? Om inte så fungerar arbetssättet jag föreslog, då FTP-överföringen mha Curl görs från linuxmaskinen. (därav att man först kopierar filen dit med scp, och sedan kör curl på den maskinen)

Btw, mirror-kommandot går inte att använda så som du skriver i första inlägget, utan används för att spegla vald mappstruktur mellan den lokala datorn och servern. Mao så måste du ändå föra över filen till linuxmaskinen innan du kan använda lftp.

Jag hänger inte riktigt med, men det är hela mappstrukturen jag vill hämta. För alla filer som ändrats/bifogats i filen vid ändring ligger i /content/ under huvudmappen. Därav fungerar mirror kalasbra

1
Bevaka tråden