web-dev-qa-db-fra.com

Comment suspendre sur ssh?

Je suppose que cette question est à peu près la même chose que Comment configurer dbus pour permettre à ssh-user de suspendre le serveur? ; sauf que je voulais mieux le formuler.

Supposons que j'ai un serveur Ubuntu fonctionnant sans escale, appelons-le MyServer. Disons, alors, j'ai un autre PC sur le même réseau local que MyServer, appelons-le MyLocalPC.

MyLocalPC est alors maintenu en suspension, sauf s'il est activé via wakeonlan par MyServer. Cette partie du processus fonctionne parfaitement pour moi: je peux me connecter via ssh à MyServer, et sur l'invite MyServer ssh, je peux émettre wakeonlan et MyLocalPC se réveille - génial.

Cependant, dès que je finis de travailler avec MyLocalPC, j'aimerais le remettre en suspension. Le problème est le suivant: je peux mettre la machine en suspension facilement, si je ssh dans MyLocalPC d’abord via ssh:

[MyServer]$ ssh MyLocalPC
[MyLocalPC]$ dbus-send --session --dest=org.freedesktop.PowerManagement --type=method_call --print-reply --reply-timeout=2000 /org/freedesktop/PowerManagement org.freedesktop.PowerManagement.Suspend

Cela suspendra MyLocalPC - mais bloquera également la sortie correcte de ssh, et finalement, la ssh à MyServer finira par se figer. J'essaie d'être délicat et publie quelque chose comme ceci:

[MyServer]$ ssh MyLocalPC "dbus-send --session --dest=org.freedesktop.PowerManagement --type=method_call --print-reply --reply-timeout=2000 /org/freedesktop/PowerManagement org.freedesktop.PowerManagement.Suspend"
Failed to open connection to "session" message bus: /bin/dbus-launch terminated abnormally with the following error: Autolaunch error: X11 initialization failed.

Ensuite, j'ai lu quelque part la variable DISPLAY devrait être définie - mais cela échoue aussi:

[MyServer]$ ssh MyLocalPC "DISPLAY=:0 dbus-send --session --dest=org.freedesktop.PowerManagement --type=method_call --print-reply --reply-timeout=2000 /org/freedesktop/PowerManagement  org.freedesktop.PowerManagement.Suspend"
Error org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.PowerManagement was not provided by any .service files

Alors, est-ce que quelqu'un sait comment puis-je émettre une suspension pour MyLocalPC, sans la connexion ssh à MyServer en gel?

4
sdaau

Il suffit de taper <enter>~& (c'est-à-dire trois frappes: entrée, squggle, esperluette) et ssh ira à l'arrière-plan, et éventuellement en timeout. C'est bien si vous voulez simplement abandonner une session interactive dans un cas comme celui-ci.

Ou, alternativement, insérez cela dans un script Shell sur MyLocalPC et connectez-vous de manière à mettre en arrière-plan la connexion:

ssh -f MyLocalPC go-to-sleep
3
poolie

Vous devez activer le transfert X11 avec ssh -Y. Vous pouvez également utiliser at now + 2 minutes pour exécuter la commande une seule fois (voir man at pour plus d'informations).

2
Adam Byrtek

Pour moi, le plus simple consiste à utiliser la commande at:

echo 'pm-suspend' | Sudo at now + 2 minutes

Puis déconnectez-vous de la session SSH.

2
Cas

définir un travail cron pour 2 minutes dans le futur et déconnecter

1
RobotHumans

Comment puis-je sortir de ssh quand il se verrouille? Il existe de nombreuses solutions valables. L'un d'eux a été mentionné par poolie; J'ai configuré un délai de maintien en vie sur mon système qui suspendra automatiquement les sessions SSH suspendues en ajoutant les éléments suivants à ~/.ssh/config:

Host *
ServerAliveInterval 5
ServerAliveCountMax 4

Fonctionne également après avoir suspendu la machine distante.

0
krlmlr