Ubuntu in standby na gebruik van SSH of RDP

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • aawe mwan
  • Registratie: December 2002
  • Laatst online: 07-07 18:45

aawe mwan

Wat ook leuk is:

Topicstarter
Ik heb een 32-bits systeem met Ubuntu, dat ik wil gebruiken voor remote toegang tot mijn thuisnetwerk. Het is de bedoeling dat deze machine in de slaapstand staat, als ik niet ben ingelogd.

Het lukt om de machine uit de slaapstand te laten komen met Wake On LAN.

Ik wil hem ook weer netjes in de slaapstand zetten als ik klaar ben. Daarvoor heb ik de volgende regel toegevoegd aan de crontab van root:

code:
1
0 * * * * flagfile="/home/root/suspend.flag";if [ -e $flagfile ] ; then rm $flagfile; echo Removed; /usr/sbin/pm-suspend; else touch $flagfile; echo Set; fi


Op elk vol uur checkt dit script een vlagbestand. Als het vlagbestand bestaat, dan verwijdert hij dat en gaat de machine in standby. Anders maakt hij op dat moment het vlagbestand aan.

Dit werkt op zich. Als ik langer dan een uur bezig ben, kan ik het vlagbestand tussendoor verwijderen. Toch zou het handiger zijn, als de machine naar standby zou gaan als de remote gebruiker uitgelogd is. Hoe zou ik dit kunnen realiseren?

Voor remote toegang gebruik ik SSH en RDP (via xrdp).

„Ik kan ook ICT, want heel moeilijk is dit niet”

Beste antwoord (via aawe mwan op 29-01-2016 23:20)


  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 22:38

Hero of Time

Moderator LNX

There is only one Legend

Heb je al eens gekeken naar de uitvoer van 'w' en 'who'? Je kan ook de uitvoer van 'last' parsen en zoeken op 'still logged in' (in principe altijd de eerste regel, tenzij er meerdere gebruikers tegelijk werken).

Commandline FTW | Tweakt met mate

Alle reacties


Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 22:38

Hero of Time

Moderator LNX

There is only one Legend

Heb je al eens gekeken naar de uitvoer van 'w' en 'who'? Je kan ook de uitvoer van 'last' parsen en zoeken op 'still logged in' (in principe altijd de eerste regel, tenzij er meerdere gebruikers tegelijk werken).

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • aawe mwan
  • Registratie: December 2002
  • Laatst online: 07-07 18:45

aawe mwan

Wat ook leuk is:

Topicstarter
Een tijdje geleden heb ik gekeken naar "who --users" en ik meen me te herinneren dat ik toen meer regels zag dan het aantal ingelogde users.

Maar tot nu toe lijkt je oplossing met
code:
1
last | grep 'still logged in'
wel precies te doen wat ik zocht.

„Ik kan ook ICT, want heel moeilijk is dit niet”


Acties:
  • 0 Henk 'm!

  • InflatableMouse
  • Registratie: December 2006
  • Laatst online: 23-06 21:11

InflatableMouse

Carina Nebula says hi!

Je kan toch gewoon /usr/sbin/pm-suspend in je .bash_logout zetten?

Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
InflatableMouse schreef op zondag 17 januari 2016 @ 20:22:
Je kan toch gewoon /usr/sbin/pm-suspend in je .bash_logout zetten?
Dan moet je wel als root inloggen. De methode met last werkt bovendien met meerdere logins tegelijkertijd.

Acties:
  • 0 Henk 'm!

  • InflatableMouse
  • Registratie: December 2006
  • Laatst online: 23-06 21:11

InflatableMouse

Carina Nebula says hi!

Klein scrippie schrijven die checkt of er anderen zijn ingelogd en dat vanuit je eigen ~/.bash_logout aanroepen?

Als het commando root nodig heeft zijn daar wel oplossingen voor. Je kan bv een groepje maken en die met visudo permissies geven om zonder password dat commando met sudo uit te voeren.

Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 22:38

Hero of Time

Moderator LNX

There is only one Legend

Maar wat als je nou een andere shell gebruikt? Dan heb je geen klap aan .bash_logout. ;)

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • aawe mwan
  • Registratie: December 2002
  • Laatst online: 07-07 18:45

aawe mwan

Wat ook leuk is:

Topicstarter
De Android clients voor SSH en RDP die ik tot nu toe gevonden heb, lijken niet echt super stabiel, dus het komt regelmatig voor dat ik niet netjes uitlog.

In zo'n geval blijft de user hangen (dat is waarschijnlijk waarom ik eerst dacht dat ik 'who' niet zou kunnen gebruiken), maar ik zag zonet dat na een minuut of 15 zo'n gebruiker automatisch uitgelogd wordt en dan doet het nieuwe crontab scriptje weer keurig zijn werk.

„Ik kan ook ICT, want heel moeilijk is dit niet”


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 22:38

Hero of Time

Moderator LNX

There is only one Legend

Welke SSH client heb je gebruikt? Ik heb namelijk nog geen problemen gehad met ConnectBot en ook MobileTerminal geeft mij SSH opties (alleen vreemd genoeg op m'n OnePlus One, m'n Nexus 5 doet dat dan weer niet). Heb wel m'n telefoons geroot en busybox erop, mogelijk dat dat nog wat extra doet.

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • aawe mwan
  • Registratie: December 2002
  • Laatst online: 07-07 18:45

aawe mwan

Wat ook leuk is:

Topicstarter
Ik had JuiceSSH en Reflection gevonden en zal ConnectBot eens proberen. Maar dat is eigenlijk weer een heel ander onderwerp.

Ik tiep blijkbaar niet snel genoeg, want het is al 2 keer gebeurd dat de machine tijdens het inloggen naar standby ging. Eens kijken hoe ik dat in het standby-script ga verwerken...

„Ik kan ook ICT, want heel moeilijk is dit niet”


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 22:38

Hero of Time

Moderator LNX

There is only one Legend

Parse /var/log/auth.log voor inlogpogingen binnen de afgelopen 5 minuten ofzo. Al zie ik mijn localhost poging er niet in komen totdat ik daadwerkelijk m'n wachtwoord heb ingevuld.
Andere optie is gewoon op vaste tijden, je begon met elk uur op het uur, dan weet je dat je tussen :58 en :01 even niet moet proberen aan te melden. ;)

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • Jovaro
  • Registratie: April 2005
  • Laatst online: 08-05 22:02
Schrijf meteen na het opstarten de tijd naar een bestand en lees dat bestand dan in je script. Als er minstens 5 (ofzo) minuten zijn verstreken dan kan de computer weer naar de slaapstand, anders even wachten.

Edit: of gewoon de uptime checken natuurlijk...

[ Voor 10% gewijzigd door Jovaro op 18-01-2016 20:45 ]


Acties:
  • 0 Henk 'm!

  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

met wat configuratie van PAM moet je zelfs niet pollen... Kijk even naar:
http://linux.die.net/man/8/pam_exec

Ik vermoed dat je met een regel als:
session optional pam_exec.so /pad/naar/script
in de sshd PAM config al de nodige hooks plaatst om events te krijgen.

Daarna kun je in je script op een manier naar jouw keuze zien of je in standby moet.
Je kan open/close van sessies tellen, je kan met who users tellen, etc...

ASSUME makes an ASS out of U and ME


Acties:
  • 0 Henk 'm!

  • aawe mwan
  • Registratie: December 2002
  • Laatst online: 07-07 18:45

aawe mwan

Wat ook leuk is:

Topicstarter
Volgens mij was de eenvoudigste manier geweest om nog een "sleep" toe te voegen aan het begin van de cronjob. Maar dit is het script waar ik het nu mee ga proberen:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/bin/bash

# Zet de machine op 'suspend' als niemand is ingelogd

logfile=/home/root/$(date +\%C\%y-\%m-\%d).log
suspend=/usr/sbin/pm-suspend

# Koptekst in de logfile
echo >>$logfile
/usr/bin/uptime >>$logfile

# Controleer of iemand is ingelogd
last -i -F | grep 'still logged in' >>$logfile
if [ $? -eq 0 ] ; then
 echo Er is nog iemand ingelogd
 exit
fi

# Wacht een minuut voor het geval iemand net bezig is met inloggen
echo Misschien is er iemand bezig met inloggen?
sleep 60

# Controleer de tweede keer
last -i -F | grep 'still logged in' >>$logfile
if [ $? -eq 0 ] ; then
 echo Intussen is iemand ingelogd
 exit
fi

echo Iedereen is uitgelogd
echo $suspend >>$logfile
sleep 2
$suspend

„Ik kan ook ICT, want heel moeilijk is dit niet”


Acties:
  • 0 Henk 'm!

  • narotic
  • Registratie: Maart 2002
  • Laatst online: 02-11-2021
Volgens mij heeft die sleep geen enkele zin. De kans is net zo groot dat je net aan het einde van die sleep begint met inloggen. In plaats van het probleem op elk heel uur verschuif je hetzelfde probleem naar elk heel uur +1 minuut.

Als je met je huidige script verder wilt ipv PAM e.d., dan zou je eventueel netstat kunnen parsen voor open connecties naar je ssh poort. Dus suspend tenzij er een user ingelogd is en tenzij een connectie open is naar je ssh poort. Niet echt netjes en je houdt altijd kans net een ssh sessie op te zetten terwijl je systeem begint met suspend.

[ Voor 10% gewijzigd door narotic op 19-01-2016 20:58 ]

- = Step Into The Pit | Industrial Strength = -


Acties:
  • 0 Henk 'm!

  • aawe mwan
  • Registratie: December 2002
  • Laatst online: 07-07 18:45

aawe mwan

Wat ook leuk is:

Topicstarter
narotic schreef op dinsdag 19 januari 2016 @ 20:48:
Volgens mij heeft die sleep geen enkele zin. De kans is net zo groot dat je net aan het einde van die sleep begint met inloggen.
Dat lijkt zo, maar de machine komt uit de slaapstand wanneer ik ga inloggen, dus de inlogpoging is al gestart op het moment dat het script de eerste keer draait.

„Ik kan ook ICT, want heel moeilijk is dit niet”


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 22:38

Hero of Time

Moderator LNX

There is only one Legend

Hoezo dat dan? Als je 'm op het hele uur laat lopen via cron en je trapt je computer uit z'n nest om :20, dan wordt er niets gestart door cron. Het gaat niet opeens alle gemiste cronjobs starten en een van de eerste dingen die 't systeem doet als 't wakker wordt, is de hardware klok uitlezen om te zorgen dat er geen andere problemen ontstaan (zoals dhcp lease expired, of nog leuker, kerberos screw up).

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • narotic
  • Registratie: Maart 2002
  • Laatst online: 02-11-2021
Hero of Time schreef op woensdag 20 januari 2016 @ 20:01:
Hoezo dat dan? Als je 'm op het hele uur laat lopen via cron en je trapt je computer uit z'n nest om :20, dan wordt er niets gestart door cron. Het gaat niet opeens alle gemiste cronjobs starten en een van de eerste dingen die 't systeem doet als 't wakker wordt, is de hardware klok uitlezen om te zorgen dat er geen andere problemen ontstaan (zoals dhcp lease expired, of nog leuker, kerberos screw up).
Wat aawe mwan volgens mij bedoelt is dat met de sleep van 60 seconde de PC begint met suspend op 1 minuut na het hele uur. Als je echter altijd de PC resumed en direct daarna inlogt, dan ondervind je geen probleem rond dit "kritieke" moment, omdat de PC nog niet aan stond op het moment dat de cronjob op het hele uur had moeten draaien.

Wellicht trouwens dat de pm hooks in /etc/pm/sleep.d ook handig kunnen zijn. Deze worden tijdens suspend, resume, hibernate etc. aangroepen en kunnen ook een actie blokkeren. Zie bijv. https://wiki.archlinux.org/index.php/pm-utils.

[ Voor 12% gewijzigd door narotic op 20-01-2016 21:20 ]

- = Step Into The Pit | Industrial Strength = -


Acties:
  • 0 Henk 'm!

  • Thc_Nbl
  • Registratie: Juli 2001
  • Laatst online: 21-05 22:24
Je hebt helemaal geen cron nodig hoor om dit te doen.
b.v.
zet in de .bashrc de regel.
code:
1
echo `date` > ~/ingelogd.txt


en in de .bash_logout
code:
1
rm ~/ingelogd.txt


en gebruik of inotify of incron om commandos uit te voeren bij aanmaken en/of verwijderen en
in sudoers zet je de rechten voor de gebruiker om suspend uit te voeren, zo blijft het veiling.
dan kan je als je eigen gebruiker bij het uitloggen, wanneer het bestand verwijderd wordt de pc gelijk in slaap stand laten gaan.

In ieder geval, zo zou ik het doen.

Lees ik nog even wat terug, stel, er zitten meerder mensen ingelogd wanneer jij uitlogt.

Het idee van aawe mwan erbij combineren.

Dan zou ik het zodoen.
zet in de /etc/bashrc de regel.
code:
1
2
# voegt naam aan bestand toe. 
echo $USER >> /tmp/ingelogd.txt


en de /etc/bash_logout
code:
1
2
3
4
5
6
7
8
9
10
11
12
if [ -e /tmp/ingelogd.txt ]; then 
   # haalt de naam weg uit het bestand.
    sed -i "s/${USER}//g" /tmp/ingelogd.txt 
fi

#en ergens voor exit
if [ -e /tmp/ingelogd.txt ]; then 
   LOGGEDINNRS=`cat  /tmp/ingelogd.txt | wc -l` 
   if [ $LOGGEDINNRS = 0 ]; then 
      sudo suspend_command
   fi
fi

[ Voor 39% gewijzigd door Thc_Nbl op 20-01-2016 21:58 ]

ehhh.. noppes


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 22:38

Hero of Time

Moderator LNX

There is only one Legend

narotic schreef op woensdag 20 januari 2016 @ 21:06:
[...]

Wat aawe mwan volgens mij bedoelt is dat met de sleep van 60 seconde de PC begint met suspend op 1 minuut na het hele uur. Als je echter altijd de PC resumed en direct daarna inlogt, dan ondervind je geen probleem rond dit "kritieke" moment, omdat de PC nog niet aan stond op het moment dat de cronjob op het hele uur had moeten draaien.
Ik snap wat z'n script doet, maar ik snap niet waarom hij de sleep erin heeft "om te voorkomen dat 't systeem gaat slapen vlak na het wakker worden". Als ik cronjobs om :05, :10 en :15 heb, gaan die niet spontaan lopen als ik 't systeem wakker maak om :20 en 'm om :04 in slaap heb gebracht.
Thc_Nbl schreef op woensdag 20 januari 2016 @ 21:39:
Je hebt helemaal geen cron nodig hoor om dit te doen.
b.v.
zet in de .bashrc de regel.
echo `date` > ~/ingelogd.txt

en in de .bash_logout
rm ~/ingelogd.txt

en gebruik of inotify of incron om commandos uit te voeren bij aanmaken en/of verwijderen en
in sudoers zet je de rechten voor de gebruiker om suspend uit te voeren, zo blijft het veiling.
dan kan je als je eigen gebruiker bij het uitloggen, wanneer het bestand verwijderd wordt de pc gelijk in slaap stand laten gaan.
Dat is wat er eerder in dit topic ook ter sprake kwam, maar het kan ook via PAM geregeld worden wat beter is. Dan hoef je ook geen sudoers te regelen.

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • Thc_Nbl
  • Registratie: Juli 2001
  • Laatst online: 21-05 22:24
Dat is wat er eerder in dit topic ook ter sprake kwam, maar het kan ook via PAM geregeld worden wat beter is. Dan hoef je ook geen sudoers te regelen.
Helemaal overheen gelezen, dat dit ook met pam wist ik nog niet.. weer wat geleerd.

ehhh.. noppes


Acties:
  • 0 Henk 'm!

  • narotic
  • Registratie: Maart 2002
  • Laatst online: 02-11-2021
Hero of Time schreef op woensdag 20 januari 2016 @ 21:50:
[...]

Ik snap wat z'n script doet, maar ik snap niet waarom hij de sleep erin heeft "om te voorkomen dat 't systeem gaat slapen vlak na het wakker worden". Als ik cronjobs om :05, :10 en :15 heb, gaan die niet spontaan lopen als ik 't systeem wakker maak om :20 en 'm om :04 in slaap heb gebracht.
Zoals ik 't begrepen heb had hij last dat hij toevallig bijv. om 01:59:59 het systeem resumed en voordat hij goed en wel zijn wachtwoord ingetyped heeft het systeem alweer suspend. Door de sleep met wederom een check heeft hij echter tot 02:01:00 om in te loggen.

- = Step Into The Pit | Industrial Strength = -


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 22:38

Hero of Time

Moderator LNX

There is only one Legend

narotic schreef op woensdag 20 januari 2016 @ 22:22:
[...]


Zoals ik 't begrepen heb had hij last dat hij toevallig bijv. om 01:59:59 het systeem resumed en voordat hij goed en wel zijn wachtwoord ingetyped heeft het systeem alweer suspend. Door de sleep met wederom een check heeft hij echter tot 02:01:00 om in te loggen.
Dat is voor net die ene minuut. Dat kan je net zo goed zelf aan denken als je 't systeem wakker maakt. Daarbij, er zit een standaard timeout op als je je systeem wakker maakt en direct weer naar suspend wilt gooien. Dus al zou je om x:59:58 het systeem wakker maken, dan gaat-ie om x:00:00 niet slapen. Ik kan 't op mijn systeem even niet vinden, maar ik weet dat het er wel is (of was, misschien is dat ondertussen verandert).

Laat ik het zo zeggen, als je op elk moment van het uur, behalve op het uur het systeem wekt, is er geen reden voor de sleep.

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • aawe mwan
  • Registratie: December 2002
  • Laatst online: 07-07 18:45

aawe mwan

Wat ook leuk is:

Topicstarter
Ik heb net een essentieel verschil ontdekt tussen last en w en who.
Ik heb een "apt-get upgrade" gedraaid terwijl ik via ssh was ingelogd en blijkbaar heeft dit de lijst die je met "last" te zien krijgt leeggegooid: er is nu alleen een regeltje "wtmp begins Mon Feb 1 19:40:04 2016" maar ik kan niet meer zien dat ik nog ingelogd was/ben. Met w en who kan dat nog wel.

[ Voor 4% gewijzigd door aawe mwan op 01-02-2016 20:25 ]

„Ik kan ook ICT, want heel moeilijk is dit niet”


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 22:38

Hero of Time

Moderator LNX

There is only one Legend

Dat 'last' verandert heeft volgens mij weinig te maken met je updates. Het komt door logrotate. Die staat namelijk in /etc/logrotate.conf ingesteld voor /var/log/wtmp op maandelijks en als je op 1 feb je systeem nog niet aan hebt gehad, gaat hij direct de log rotates uitvoeren als 't systeem wakker wordt. Als je al bent aangemeld voordat de rotate daadwerkelijk heeft plaatsgevonden, dan is het logisch dat je je sessie met 'last' niet meer ziet.

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • aawe mwan
  • Registratie: December 2002
  • Laatst online: 07-07 18:45

aawe mwan

Wat ook leuk is:

Topicstarter
Hero of Time schreef op maandag 01 februari 2016 @ 21:53:
Dat 'last' verandert heeft volgens mij weinig te maken met je updates. Het komt door logrotate.
Klopt, ik zie mijn laatste (open) sessie nog staan met "last -f /var/log/wtmp.1".

„Ik kan ook ICT, want heel moeilijk is dit niet”

Pagina: 1