ssh in de achtergrond

Pagina: 1
Acties:

  • htca
  • Registratie: November 2001
  • Laatst online: 09-02 21:49
Hallo,

Ik probeer vanaf een lokale server hier te connecten met onze webserver en mysql server, dit gaat prima met SSH. Echter ik wil via een cronjob een mysqldump uitvoeren van de database. In de voorgrond werkt het prima. Op de server is een autorized key aangemaakt hierdoor kan ik een tunnel opzetten.
Ik maak een ssh verbinding met:
ssh -L 3307:<ip>:3306 <username>@<domain>

Vervolgens open ik een nieuw window waarin ik een mysqldump doe op een server via port 3307. dit werkt, echter wat ik wil is deze dump uitvoeren via een cronjob. Op de een of andere manier krijg ik ssh niet in de achtergrond aan het werk.

  • Arnout
  • Registratie: December 2000
  • Laatst online: 10-02 17:38
Zet er even "sleep 300" achter, dan heb je 300 seconden om te starten met communicatie.
Nu zal hij direct de tunnel weer opruimen omdat er geen activiteit is.

Verwijderd

Ff voor het id, zet je een permanente ssh tunnel op, of is dit een ad-hoc tunnel, aangeroepen vanuit een script? Tevens, wat krijg je aan output in je cronmail van het script wat je hiervoor probeert af te trappen?

  • htca
  • Registratie: November 2001
  • Laatst online: 09-02 21:49
Arnout schreef op maandag 25 juli 2005 @ 09:47:
Zet er even "sleep 300" achter, dan heb je 300 seconden om te starten met communicatie.
Nu zal hij direct de tunnel weer opruimen omdat er geen activiteit is.
Dit is niet het probleem. Als ik in de achtergrond probeer te draaien lijkt het alsof er iets met de output van het ssh commando gebeurt. MAW alsof hij het niet kwijt kan. Ik heb al geprobeerd de output te redirecten naar /dev/null maar dat hielp ook niet.

  • htca
  • Registratie: November 2001
  • Laatst online: 09-02 21:49
Verwijderd schreef op maandag 25 juli 2005 @ 10:29:
Ff voor het id, zet je een permanente ssh tunnel op, of is dit een ad-hoc tunnel, aangeroepen vanuit een script? Tevens, wat krijg je aan output in je cronmail van het script wat je hiervoor probeert af te trappen?
In principe mag het allebei, maar momenteel probeer ik een permanente tunnel op te zetten. Wat ik ook geprobeerd heb, is de tunnel te openen en het dumpcommando op de server te draaien, maar mysqldump is niet beschikbaar op de server net als mysql-client zelf.

  • bakkerl
  • Registratie: Augustus 2001
  • Laatst online: 20-01 20:59

bakkerl

Let there be light.

Onder welke user testje als het direct test.
Een crontab draait in de meeste gevallen als root. Dus als je als een andere gebruiker test zou het hier aan kunnen liggen.

Wil je echter een permante tunnel, kijk dan eens naar stunnel.

  • htca
  • Registratie: November 2001
  • Laatst online: 09-02 21:49
bakkerl schreef op maandag 25 juli 2005 @ 10:51:
Onder welke user testje als het direct test.
Een crontab draait in de meeste gevallen als root. Dus als je als een andere gebruiker test zou het hier aan kunnen liggen.

Wil je echter een permante tunnel, kijk dan eens naar stunnel.
De tunnel wordt wel correct opgezet, alleen moet deze altijd in de voorgrond draaien. Zowel als root als gebruiker.

  • Arnout
  • Registratie: December 2000
  • Laatst online: 10-02 17:38
't Lijkt erop dat je 2x "-t" moet opgeven.

https://www.redhat.com/ar...03-November/msg00525.html


-t Force pseudo-tty allocation. This can be used to execute arbi-
trary screen-based programs on a remote machine, which can be
very useful, e.g., when implementing menu services. Multiple -t
options force tty allocation, even if ssh has no local tty.

[ Voor 58% gewijzigd door Arnout op 25-07-2005 11:01 ]


  • htca
  • Registratie: November 2001
  • Laatst online: 09-02 21:49
Arnout schreef op maandag 25 juli 2005 @ 10:59:
't Lijkt erop dat je 2x "-t" moet opgeven.

https://www.redhat.com/ar...03-November/msg00525.html


-t Force pseudo-tty allocation. This can be used to execute arbi-
trary screen-based programs on a remote machine, which can be
very useful, e.g., when implementing menu services. Multiple -t
options force tty allocation, even if ssh has no local tty.
Dit heeft me niet geholpen:
code:
1
2
3
4
5
htca@donald> ssh -t -t -L 3307:*********:3306 ******@***********
bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 3307
Could not request local forwarding.
Warning: No xauth data; using fake authentication data for X11 forwarding.

Ik kan nu port 3307 niet meer bereiken en bovendien kan ik hem ook niet in de achtergrond draaien:
code:
1
2
3
4
5
htca@donald> ssh -t -t -L 3307:*********:3306 ********@*********** >& /dev/null &
[1] 28409
htca@donald> 
[1]  + Suspended (tty output)        ssh -t -t -L 3307:*********:3306 *********@******** >& /dev/null
htca@donald>

  • htca
  • Registratie: November 2001
  • Laatst online: 09-02 21:49
Het werkt, maar nog niet zoals ik wil. De volgende code zorgt ervoor dat er op de lokale machine een vi sessie wordt geopend. Daardoor komt het process niet op suspended:
code:
1
ssh -n -L 3307:***********:3306 ********@************* vi &

Alleen vind ik het niet zo netjes om vi continue te hebben openstaan op de server (het is niet mijn server maar die van de provider). Iemand een alternatief?

[ Voor 9% gewijzigd door htca op 25-07-2005 11:30 ]


Verwijderd

Kun je in cron anders niet zoiets opnemen:
code:
1
2
3
ssh -i /pad/naar/passwordless/key user@mysqlserver \
'/pad/naar/mysqldump -op -ties' \
| bzip2 -9c > /een/output/bestand.sql.bz2

[ Voor 8% gewijzigd door Verwijderd op 25-07-2005 12:06 ]


  • htca
  • Registratie: November 2001
  • Laatst online: 09-02 21:49
Verwijderd schreef op maandag 25 juli 2005 @ 12:06:
Kun je in cron anders niet zoiets opnemen:
code:
1
2
3
ssh -i /pad/naar/passwordless/key user@mysqlserver \
'/pad/naar/mysqldump -op -ties' \
| bzip2 -9c > /een/output/bestand.sql.bz2
nope dat werk niet omdat /pad/naar/mysqldump niet bestaat op de remote server

  • jant
  • Registratie: Juli 2000
  • Niet online
Misschien een beetje offtopic, maar draai het geheel eens om.

Crontabje op de mysql-server met een mysqldump en vervolgens een scp naar die tweede kist.

Een album per dag; een selectie: https://open.spotify.com/playlist/6s3nNLl8pJpCwLR3LPligA?si=dddc51153b2a49e8


  • htca
  • Registratie: November 2001
  • Laatst online: 09-02 21:49
jant schreef op maandag 25 juli 2005 @ 13:37:
Misschien een beetje offtopic, maar draai het geheel eens om.

Crontabje op de mysql-server met een mysqldump en vervolgens een scp naar die tweede kist.
Ik heb niet heel veel rechten op de server. Ik heb ontdekt dat de volgende regel werkt:
code:
1
ssh -fnN2g -L 3307:******:3306 *******@*************

Echter nu nog een scriptje maken wat het in de lucht houdt. Ik zat te denken aan het volgende:
code:
1
2
3
4
5
6
7
while [ true ]; do
 ps -C ssh --no-header > tt
 if [ -f tt ]; then
  ssh -fnN2g -L 3307:******:3306 *******@*************
 fi
 /bin/rm tt
done

Maar er komt toch een file genaamd tt in de directory en het scriptje werkt niet.

Verwijderd

Quick and very dirty:

code:
1
2
3
4
5
#!/bin/sh
test=`ps -C ssh --no-header`
if [ ! "$test" ]; then
  ssh -fnN2g -L 3307:******:3306 *******@*************
fi


Let op dat bij test=`....` je backticks gebruikt en geen quotjes (Dus die naast de 1 op je toetsenbord). Hiermee vang je de uitvoer van het commando op in de variabele.

Bovenstaande kan je beter in een cronjob gooien aangezien een while [ true ] script enorm veel processortijd vraagt. Kijk voor de grap eens in een andere sessie/shell met het programma top en je ziet wat ik bedoel. Als je toch while [ true ] wilt gebruiken zet er dan minimaal een sleep <seconds> in dat verlicht de boel al een hoop...

[ Voor 4% gewijzigd door Verwijderd op 26-07-2005 11:16 ]

Pagina: 1