Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Extinction SIMPLISSIME à distance d'un poste linux...depuis une machine windows

18 réponses
Avatar
ripilaf2003
bonjour,

Je cherche à éteindre à distance un poste linux depuis un script lancé
sur une machine windows.
Le but est de simplifier au maximum les manipulations pour
l'utilisateur de windows quand il veut éteindre la machine linux (pour
éviter qu'il n'appuie sur le bouton on/off du PC).
Pour joindre la machine linux (qui fait office de paserelle internet)
on dispose d'un serveur ssh sur le linux et du client ssh win32 sur la
machine windows.

Exite-t-il un moyen de scripter quelque chose de simple sur la machine
windows afin que l'utilisateur n'ai qu'à cliquer pour éteindre la
machine ?
La securite autour du mot de passe n'est pas critique, celui ci peut
apparaitre dans le script.
Est-ce que le script est le plus simple ? d'autre solution ?

Mes connaissances en script shell bash étant très pauvres, je n'ai pas
été capable de décrypter les morcerau de codes trouvés sur internet
afin de faire ce script !!! :/

Merci d'avance pour votre aide.

10 réponses

1 2
Avatar
J. Mayer
On Mon, 11 Aug 2003 16:10:55 -0700, Jean Dupond wrote:

bonjour,

Je cherche à éteindre à distance un poste linux depuis un script lancé
sur une machine windows.
Le but est de simplifier au maximum les manipulations pour
l'utilisateur de windows quand il veut éteindre la machine linux (pour
éviter qu'il n'appuie sur le bouton on/off du PC).
Pour joindre la machine linux (qui fait office de paserelle internet)
on dispose d'un serveur ssh sur le linux et du client ssh win32 sur la
machine windows.

Exite-t-il un moyen de scripter quelque chose de simple sur la machine
windows afin que l'utilisateur n'ai qu'à cliquer pour éteindre la
machine ?
La securite autour du mot de passe n'est pas critique, celui ci peut
apparaitre dans le script.
Est-ce que le script est le plus simple ? d'autre solution ?

Mes connaissances en script shell bash étant très pauvres, je n'ai pas
été capable de décrypter les morcerau de codes trouvés sur internet
afin de faire ce script !!! :/

Merci d'avance pour votre aide.


Le plus simple:
chmod a+s /sbin/halt

et ton script devient:
#!/bin/sh
/sbin/halt

Si de toute façon un utilisateur distant et quelconque peut
éteindre la machine, autant que tout le monde puisse le faire...
Sinon, en tant que root, tu copie halt vers un dossier privé
de l'utilisateur autorisé à éteindre la machine:
mkdir /home/toto/bin
chmod 700 /home/toto/bin
cp /sbin/halt /home/toto/bin
chmod a+s /home/toto/bin

et dans ce cas, le script est:
#!/bin/sh
/home/toto/bin/halt

Mais seul l'utilisateur toto peut éteindre la machine.
Et tu n'as pas besoin de mot de passe dans le script...

Cordialement.

Avatar
Remi Moyen
On Tue, 12 Aug 2003, meumeu wrote:

Je cherche à éteindre à distance un poste linux depuis un script lancé
sur une machine windows.



Comme astuce, on peut créer un user qui a le droit d'éteindre la machine,
dans son profile on met la ligne qu'il faut pour exécuter l'arrêt de la
machine. Ainsi il suffit qu'il lance la session ssh, donne le login,
éventuellement le mot de passe, on valide et zou ca éteint la machine tout
seul.


Autant lui mettre shutdown comme shell, dans /etc/passwd, non ? Ça évitera
de faire pleins de trucs inutiles en lançant un shell de login pour rien.

Par contre niveau sécurité je sais pas ce que ca vaut...


Aucune idée.
--
Rémi Moyen
"Malgré les apparences, le temps est très varié à Nancy :
pluie, nuages, neige, brouillard, grêle, ..."



Avatar
J. Mayer
On Tue, 12 Aug 2003 11:50:30 +0200, Remi Moyen wrote:

On Tue, 12 Aug 2003, meumeu wrote:

Je cherche à éteindre à distance un poste linux depuis un script lancé
sur une machine windows.



Comme astuce, on peut créer un user qui a le droit d'éteindre la machine,
dans son profile on met la ligne qu'il faut pour exécuter l'arrêt de la
machine. Ainsi il suffit qu'il lance la session ssh, donne le login,
éventuellement le mot de passe, on valide et zou ca éteint la machine tout
seul.


Autant lui mettre shutdown comme shell, dans /etc/passwd, non ? Ça évitera
de faire pleins de trucs inutiles en lançant un shell de login pour rien.

Oui, mais ça veut dire que shutdown doit être suid,

donc que tout le monde peut éteindre la machine.

Par contre niveau sécurité je sais pas ce que ca vaut...


Aucune idée.
Pour le login, c'est OK.

Par contre, si halt ou shutdown sont suid...




Avatar
Xes
Et pourquoi pas utiliser sudo et autoriser la commande halt à un utilisateur
précis et il suffit de se connecter en ssh et taper la commande !
Avatar
J. Mayer
On Tue, 12 Aug 2003 13:52:23 +0200, Xes wrote:

Et pourquoi pas utiliser sudo et autoriser la commande halt à un utilisateur
précis et il suffit de se connecter en ssh et taper la commande !
sudo est un gros trou de sécurité à mon avis...

Autant mettre halt en suid root, c'est plus simple...

Avatar
J. Mayer
On Tue, 12 Aug 2003 11:09:01 +0000, Thierry Boudet wrote:

In article , J. Mayer wrote:

Autant lui mettre shutdown comme shell, dans /etc/passwd, non ? Ça évitera
de faire pleins de trucs inutiles en lançant un shell de login pour rien.

Oui, mais ça veut dire que shutdown doit être suid,

donc que tout le monde peut éteindre la machine.

Ben, il n'y a qu'a écrire un wrapper en C, qui lui est suid root,

mais qui vérifiera quel user l'a lancé avant de faire un exec de
shutdown avec la paramètres qui vont bien. Solution non testée.

Mais j'ai déja utilisé ce genre de hack dans d'autres contextes,
par exemple lancer un script shell en tant que root, et ça marche
pas trop mal. Ceci dit, je ne maitrise pas les implications
ésotériques au niveau de la sécurité...


Il suffit que le programme en question ne soit utilisable
que par un utilisateur donné, en le mettant dans un répertoire privé.
Ou de faire un truc du style:

<--- cut here --->
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

int main (void)
{
char *initstr[] = { "/sbin/init", "0", NULL, };

/* Replace 1000 by the wanted uid/gid */
if (getuid() != 1000 || geteuid() != 0 ||
getgid() != 1000 || getegid() != 0) {
fprintf(stderr, "Authentification failedn");
exit(1);
}
execve(initstr[0], initstr, NULL);
/* Print error message if it fails. */
fprintf(stderr, "%mn");

/* Never reached */
exit(1);
}
<--- cut here --->

Et mettre celà suid. Effectivement, ça marche...
Et ce programme peut devenir le login de l'utilisateur
halt, par exemple, ce qui fait qu'il lui suffit de se logguer
pour arreter la machine. Ca me semble assez élégant...



Avatar
TiChou
Dans l'article news:,
Jean Dupond écrivait :

bonjour,

Je cherche à éteindre à distance un poste linux depuis un script lancé
sur une machine windows.
Le but est de simplifier au maximum les manipulations pour
l'utilisateur de windows quand il veut éteindre la machine linux (pour
éviter qu'il n'appuie sur le bouton on/off du PC).
Pour joindre la machine linux (qui fait office de paserelle internet)
on dispose d'un serveur ssh sur le linux et du client ssh win32 sur la
machine windows.

Exite-t-il un moyen de scripter quelque chose de simple sur la machine
windows afin que l'utilisateur n'ai qu'à cliquer pour éteindre la
machine ?
La securite autour du mot de passe n'est pas critique, celui ci peut
apparaitre dans le script.
Est-ce que le script est le plus simple ? d'autre solution ?

Mes connaissances en script shell bash étant très pauvres, je n'ai pas
été capable de décrypter les morcerau de codes trouvés sur internet
afin de faire ce script !!! :/

Merci d'avance pour votre aide.


Une solution simple et relativement secure est de créer un compte 'eteindre'
d'uid 0 sur la machine Linux avec comme shell la commande /sbin/halt et
d'utiliser ssh avec l'authentification par clé (RSA sans passphrase) pour se
loguer simplement sur la machine Linux depuis la machine Windows.

Selon le client ssh Windows, on génère le couple de clés privé et publique.

ssh-keygen pour le client OpenSSH de cygwin (man ssh-keygen)
puttygen.exe pour le client PuTTY
(http://www.tartarus.org/~simon/puttydoc/Chapter8.html)
Menu Tools -> Create Public Key pour le client SecureCRT (F1 pour l'aide ;))


Sur la machine Linux :

On crée le compte 'eteindre'

# useradd -u 0 -o -g 0 -d /root/.halt -m -k /dev/null -s /sbin/halt eteindre
# mkdir /root/.halt/.ssh
# chmod -R 700 /root/.halt

On crée le fichier /root/.halt/.ssh/authorized_keys2 en y insérant la clé
publique générée précédement.

# vi /root/.halt/.ssh/authorized_keys2
# chmod 600 /root/.halt/.ssh/authorized_keys2

On vérifie que dans la configuration de sshd /etc/ssh/sshd_config on a :
PermitRootLogin without-password


Sur la machine Windows :

On crée une nouvelle session dans le client ssh avec comme login 'eteindre'
tout en utilisant la clé privé générée précédement.
Ainsi, l'ouverture de cette session devrait automatiquement lancer la
procédure d'arret de la machine Linux.

ssh.exe -i /chemin/vers/la/clé/privé

--
TiChou

Avatar
TiChou
Dans l'article news:,
Jean Dupond écrivait :

bonjour,


Bonjour,

Je cherche à éteindre à distance un poste linux depuis un script lancé
sur une machine windows.
Le but est de simplifier au maximum les manipulations pour
l'utilisateur de windows quand il veut éteindre la machine linux (pour
éviter qu'il n'appuie sur le bouton on/off du PC).
Pour joindre la machine linux (qui fait office de paserelle internet)
on dispose d'un serveur ssh sur le linux et du client ssh win32 sur la
machine windows.

Exite-t-il un moyen de scripter quelque chose de simple sur la machine
windows afin que l'utilisateur n'ai qu'à cliquer pour éteindre la
machine ?
La securite autour du mot de passe n'est pas critique, celui ci peut
apparaitre dans le script.
Est-ce que le script est le plus simple ? d'autre solution ?


Une solution simple et relativement secure est de créer un compte 'eteindre'
d'uid 0 sur la machine Linux avec comme shell la commande /sbin/halt et
d'utiliser ssh avec l'authentification par clé (RSA sans passphrase) pour se
loguer simplement sur la machine Linux depuis la machine Windows.

Selon le client ssh Windows, on génère le couple de clés privé et publique.

ssh-keygen pour le client OpenSSH de cygwin (man ssh-keygen)
puttygen.exe pour le client PuTTY
(http://www.tartarus.org/~simon/puttydoc/Chapter8.html)
Menu Tools -> Create Public Key pour le client SecureCRT (F1 pour l'aide ;))


Sur la machine Linux :

On crée le compte 'eteindre'

# useradd -u 0 -o -g 0 -d root.halt -m -k /dev/null -s /sbin/halt eteindre
# mkdir root.halt/.ssh
# chmod -R 700 root.halt

On crée le fichier root.halt/.ssh/authorized_keys2 en y insérant la clé
publique générée précédement.

# vi root.halt/.ssh/authorized_keys2
# chmod 600 root.halt/.ssh/authorized_keys2

On vérifie que dans la configuration de sshd /etc/ssh/sshd_config on a :
PermitRootLogin without-password


Sur la machine Windows :

On crée une nouvelle session dans le client ssh avec comme login 'eteindre'
tout en utilisant la clé privé générée précédement.
Ainsi, l'ouverture de cette session devrait automatiquement lancer la
procédure d'arret de la machine Linux.

Il suffit alors de créer un raccourci Windows qui lancerait dans le cas du
client ssh de cygwin quelque chose comme :

"C:cygwinbinssh.exe -i /chemin/vers/la/clé/privé "

--
TiChou

Avatar
J. Mayer
On Tue, 12 Aug 2003 16:34:28 +0200, TiChou wrote:

Dans l'article news:,
Jean Dupond écrivait :

bonjour,


Bonjour,

Je cherche à éteindre à distance un poste linux depuis un script lancé
sur une machine windows.
Le but est de simplifier au maximum les manipulations pour
l'utilisateur de windows quand il veut éteindre la machine linux (pour
éviter qu'il n'appuie sur le bouton on/off du PC).
Pour joindre la machine linux (qui fait office de paserelle internet)
on dispose d'un serveur ssh sur le linux et du client ssh win32 sur la
machine windows.

Exite-t-il un moyen de scripter quelque chose de simple sur la machine
windows afin que l'utilisateur n'ai qu'à cliquer pour éteindre la
machine ?
La securite autour du mot de passe n'est pas critique, celui ci peut
apparaitre dans le script.
Est-ce que le script est le plus simple ? d'autre solution ?


Une solution simple et relativement secure est de créer un compte 'eteindre'
d'uid 0 sur la machine Linux avec comme shell la commande /sbin/halt et
d'utiliser ssh avec l'authentification par clé (RSA sans passphrase) pour se
loguer simplement sur la machine Linux depuis la machine Windows.

ça suppose que /sbin/halt soit suid root...

c'est le seul défaut. Pour la partie ssh, c'est effectivement
la bonne solution.

Cordialement.


Avatar
TiChou
Dans l'article news:,
J. Mayer écrivait :

Une solution simple et relativement secure est de créer un compte
'eteindre' d'uid 0 sur la machine Linux avec comme shell la commande
^^^^^


/sbin/halt et d'utiliser ssh avec l'authentification par clé (RSA


ça suppose que /sbin/halt soit suid root...

# useradd -u 0 -o -g 0 -d root.halt -m -k /dev/null -s /sbin/halt
^^^^^^^



Et pourquoi donc ? :)

Nullement besoin de suid /sbin/halt, puisqu'il est lancé par un compte d'uid
0, c'est là l'avantage de cette solution en plus de l'auth par clé.

--
TiChou


1 2