OVH Cloud OVH Cloud

Effacer la derniere ligne d'un fichier

25 réponses
Avatar
Lionel
Bonjour,

Je veux programmer dans un cron l'actualisation du
fichier /etc/ssh/ssd_config ou je mets à la fin une ligne AllowUsers .....
avec la liste des utilisateurs ayant modifié le mot de passe par défaut du
serveur. J'ai fait un script qui génere la liste des utilisateurs dans un
fichier, je voudrais faire un truc du style:

"efface la derniere ligne de /etc/ssh/ssd_config"
echo -h "AllowUsers " >> /etc/ssh/ssd_config
cat fichier >> /etc/ssh/ssd_config
/etc/init.d/ssh restart

Problème: je n'ai pas trouvé comment faire "efface la derniere ligne
de /etc/ssh/ssd_config"

Merci pour votre aide.

Lionel.

10 réponses

1 2 3
Avatar
lhabert
Lionel :

echo -h "AllowUsers " >> /etc/ssh/ssd_config
cat fichier >> /etc/ssh/ssd_config
/etc/init.d/ssh restart

Problème: je n'ai pas trouvé comment faire "efface la derniere ligne
de /etc/ssh/ssd_config"


{
head -n -1 /etc/ssh/sshd_config
cat fichier
} > /etc/ssh/sshd_config.new

mv /etc/ssh/sshd_config /etc/ssh/sshd_config

Avatar
lgmdmdlsr
Lionel wrote:

Bonjour,


Bonjour.

Problème: je n'ai pas trouvé comment faire "efface la derniere ligne
de /etc/ssh/ssd_config"


cat /etc/ssh/sshd_config | grep -v AllowUsers > /etc/ssh/sshd_config

n'efface pas la dernière ligne de /etc/ssh/sshd_config mais efface toutes
les lignes contenant AllowUsers (ce qui est SJNMA le but recherché).

(vérifier quand même qu'il n'y ait qu'une ligne contenant AllowUsers dans le
fichier en question, et une sauvegarde dudit fichier avant toute manip. est
fortement conseillée ...)

--
lgmdmdlsr

Avatar
Sébastien Monbrun aka TiChou
Dans le message <news:dqtjn8$oo5$,
*Lionel* tapota sur f.c.o.l.configuration :

Bonjour,

Je veux programmer dans un cron l'actualisation du
fichier /etc/ssh/ssd_config


Le fichier /etc/ssh/sshd_config vous voulez dire ?

ou je mets à la fin une ligne AllowUsers .....


N'est ce pas un peu hasardeux comme manière de faire ? Et si la dernière
ligne n'est pas AllowUsers ? Et si le script plante au moment d'écrire dans
ce fichier de configuration ? Et si le script plante au moment de relancer
le service ssh ?

avec la liste des utilisateurs ayant modifié le mot de passe par défaut du
serveur.


Ne serait-il pas plus simple que ces utilisateurs soient plutôt membres du
groupe sshd (ou un autre nom de groupe) et utiliser alors la directive
AllowGroups au lieu d'utiliser la directive AllowUsers ? Ça permet ainsi, de
manière dynamique et sans modifier le fichier de configuration de sshd, de
rajouter ou de retirer les utilisateurs autorisés ou non à se connecter en
ssh sur le serveur.

J'ai fait un script qui génere la liste des utilisateurs dans un
fichier, je voudrais faire un truc du style:

"efface la derniere ligne de /etc/ssh/ssd_config"
echo -h "AllowUsers " >> /etc/ssh/ssd_config
cat fichier >> /etc/ssh/ssd_config


Il y a beaucoup plus simple et sûr.

Avec un GNU sed récent et son option '-i inplace' :

sed -i~ -e "/^[[:space:]]*AllowUsers.*/{
s//AllowUsers $(< fichier)/
}" /etc/ssh/sshd_config

(que j'ai écris sur plusieurs lignes pour plus de clareté)

Avec awk et en passant par un fichier intermédiare :

awk -v users=$(< fichier) '{
if (/^[[:space:]]*AllowUsers/) {
print "AllowUsers " users
} else {
print
}
}' /etc/ssh/sshd_config > /etc/ssh/sshd_config.new
cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config~
cat /etc/ssh/sshd_config.new > /etc/ssh/sshd_config
rm /etc/ssh/sshd_config.new

Problème: je n'ai pas trouvé comment faire "efface la derniere ligne
de /etc/ssh/ssd_config"


Pour afficher le contenu d'un fichier sauf sa dernière ligne :

head -n -1 fichier

--
Sébastien Monbrun aka TiChou

Avatar
Sébastien Monbrun aka TiChou
Dans le message <news:,
*lgmdmdlsr* tapota sur f.c.o.l.configuration :

Problème: je n'ai pas trouvé comment faire "efface la derniere ligne
de /etc/ssh/ssd_config"


cat /etc/ssh/sshd_config | grep -v AllowUsers > /etc/ssh/sshd_config


UUoC ! Mais là n'est pas le pire.

n'efface pas la dernière ligne de /etc/ssh/sshd_config mais efface toutes
les lignes contenant AllowUsers


Non, il y a de grande chance que ça vide complètement le fichier.
En effet, la redirection '>' va vider le fichier avant qu'il ne soit lu.

(ce qui est SJNMA le but recherché).


Je ne crois pas. ;-)

Il faudrait plutôt procéder ainsi :

{
rm /etc/ssh/sshd_config &&
grep -v AllowGroup > /etc/ssh/sshd_config
} < /etc/ssh/sshd_config

Mais en cas de pépin, on risque de perdre le fichier. C'est pour ça qu'il
est toujours plus prudent de passer par un fichier intermédiaire.

et une sauvegarde dudit fichier avant toute manip. est fortement
conseillée ...)


La preuve. ;-)

--
Sébastien Monbrun aka TiChou


Avatar
Sébastien Monbrun aka TiChou
(Supersedes )

Dans le message <news:,
*lgmdmdlsr* tapota sur f.c.o.l.configuration :

Dans le message <news:,
*lgmdmdlsr* tapota sur f.c.o.l.configuration :

Problème: je n'ai pas trouvé comment faire "efface la derniere ligne
de /etc/ssh/ssd_config"


cat /etc/ssh/sshd_config | grep -v AllowUsers > /etc/ssh/sshd_config


UUoC ! Mais là n'est pas le pire.

n'efface pas la dernière ligne de /etc/ssh/sshd_config mais efface toutes
les lignes contenant AllowUsers


Non, il y a de grande chance que ça vide complètement le fichier.
En effet, la redirection '>' va vider le fichier avant qu'il ne soit lu.

(ce qui est SJNMA le but recherché).


Je ne crois pas. ;-)

Il faudrait plutôt procéder ainsi :

{
rm /etc/ssh/sshd_config &&
grep -v AllowUsers > /etc/ssh/sshd_config
} < /etc/ssh/sshd_config

Mais en cas de pépin, on risque de perdre le fichier. C'est pour ça qu'il
est toujours plus prudent de passer par un fichier intermédiaire.

et une sauvegarde dudit fichier avant toute manip. est fortement
conseillée ...)


La preuve. ;-)

--
Sébastien Monbrun aka TiChou


Avatar
Nicolas George
Sébastien Monbrun aka TiChou wrote in message
:
Il y a beaucoup plus simple et sûr.


Oui, mais tu n'as pas donné la meilleure solution :-Þ La meilleure solution,
c'est :

{
cat /etc/ssh/sshd_config.skel
echo AllowUsers $USERS
} > /etc/ssh/sshd_config

C'est à dire d'avoir un /etc/ssh/sshd_config.skel qui contient le fichier de
base, et que le script ne s'amuse en aucun cas à modifier.

Avatar
lhabert
Non, la meilleure solution, c'est d'écrire un fs fuse qui permette de
présenter comme un fichier la concaténation de plusieurs fichiers existants.
Avatar
Sébastien Monbrun aka TiChou
Dans le message <news:dqtrbn$2upf$,
*Nicolas George* tapota sur f.c.o.l.configuration :

Il y a beaucoup plus simple et sûr.


Oui, mais tu n'as pas donné la meilleure solution :-Þ


Beuh ! :-) Et ma solution de plutôt utiliser AllowGroups ?

--
Sébastien Monbrun aka TiChou


Avatar
Nicolas George
Sébastien Monbrun aka TiChou wrote in message
:
Beuh ! :-) Et ma solution de plutôt utiliser AllowGroups ?


Je n'aime pas tellement. D'abord, il faudrait faire attention à ne pas
prendre un groupe qui a déjà une certaine signification pour le système
installé, histoire de ne pas fournir de privilèges qu'on ne voulait pas
fournir.

Ensuite, je trouve assez bof l'idée d'un groupe auquel tous les utilisateurs
appartiennent (ce qui est ultimement le cas dans ce qu'a décrit le posteur
original).

En fait, la bonne solution serait d'utiliser un module PAM pour ça, mais je
n'ai aucune idée de s'il existe un module adapté.

Avatar
Bernard Déléchamp
Lionel wrote:
Bonjour,


Bonsoir,

<...>

Problème: je n'ai pas trouvé comment faire "efface la derniere ligne
de /etc/ssh/ssd_config"


Perso, je garderais dans un coin le fichier sans la dernière ligne, je
le copierais à la place du fichier de config', et j'y ajouterais les
lignes désirées.

Bien sûr avec des grep, sed, awk et autres on doit pouvoir y arriver
pour un T.P, mais dans la vraie vie... ;-)

Bon courage.

--
Quand Marilou danse reggae
Petit détail à divulguer
En petit nègre dialogué
Après l'amour pisser sagaie. Serge Gainsbourg.

1 2 3