Problème lecture de fichier et connexion ssh
Fermé
Mimoz
-
Modifié le 14 juin 2021 à 11:32
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 14 juin 2021 à 12:01
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 14 juin 2021 à 12:01
A voir également:
- Problème lecture de fichier et connexion ssh
- Gmail connexion - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier host - Guide
1 réponse
mamiemando
Messages postés
33446
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
20 décembre 2024
7 812
Modifié le 14 juin 2021 à 12:06
Modifié le 14 juin 2021 à 12:06
Bonjour,
Il y a plusieurs choses à savoir et qui ne vont à mon avis pas.
Voilà à quoi ça pourrait ressembler :
Tu constateras que
Bonne chance
Il y a plusieurs choses à savoir et qui ne vont à mon avis pas.
- Pour commencer, tout script qui implique
ssh
devrait reposer une clé ssh. Cela évite de nombreux trous de sécurité (soit stocker le mot de passe en clair dans un fichier, soit le passer en clair en ligne de commande, ce qui le rend visible danstop
ou dans l'historique de ton shell) - Je ne vois pas trop l'intérêt de
sshpass
dans ton cas, car tu demandes à l'utilisateur son mot de passe en mode interactif. La commandesshpass
est utilisée pour permettre à un script d'accéder via ssh à une machine distance en lisant le mot de passe de l'utilisateur ssh, généralement à partir d'un fichier qui le stocke en clair mais avec des droits, voir ce lien. Cependant,sshpass
présente plein d'inconvénients par rapport à une clé ssh, notamment :- Toutes tes commandes
ssh
doivent être préfixées parsshpass
; - Si quelqu'un parvient à ouvrir le fichier qui contient le mot de passe, il récupère un accès sur une autre machine. Il faut donc être vigilant aux droits. Si la machine client est compromise, le mot de passe peut être à terme récupéré.
- Si le mot de passe de l'utilisateur ssh change, alors le script ne marchera plus.
- Contrairement à une version avec des clés ssh, il n'y a pas vraiment de traçabilité côté serveur. Avec une clé ssh au contraire, côté serveur, on voit précisément quelles clés ont accès au compte (dans
~/.ssh/authorized_keys
).
- Toutes tes commandes
- Comme tu utilises l'opérateur
$(...)
, l'interpréteur devrait être/bin/bash
et non/bin/sh
. - Plutôt que lire le fichier au fur et à mesure du script, le plus simple serait soit de prendre les données en paramètre, soit de charger les données de ton fichier d'entrée au début du fichier. Je suspecte que le fait d'ouvrir une connexion ssh casse le file descriptor qui était ouvert sur ton fichier, ce qui expliquerait ton problème.
- Veille lorsque tu utilises l'opérateur $ à l'utiliser dans des guillemets pour éviter les injections de code et les problèmes liés aux espaces.
Voilà à quoi ça pourrait ressembler :
#!/bin/bash LOGIN=toto HOST=localhost read line1 read line2 echo "$line1" i=$(ssh "$LOGIN"@"$HOST" du -s /home/"$LOGIN" | cut -f 1 -d "/") echo "$i" echo "$line2"
Tu constateras que
line2vaut bien la valeur de la deuxième ligne (ce que tu appelais
$filedans ton exemple). Note que j'utilise la variable
$LOGINcar
$USERest déjà utilisé (voir résultat de
env) pour stocker le login de l'utilisateur qui a lancé le shell.
Bonne chance