Question Comment changer la valeur des fichiers système sans les ouvrir?


Est-il possible de changer la valeur de "PermitRootLogin" dans /etc/ssh/sshd_config via une commande dans le terminal?

Je veux changer les valeurs de ce fichier sans l'ouvrir, et changer la valeur de "PermitRootLogin" de oui à non.


0
2017-11-23 20:05


origine




Réponses:


Il est parfaitement possible de le faire avec sed, correspond à la ligne et change la valeur:

sed -i '/^PermitRootLogin/s/yes/no/' /etc/ssh/sshd_config
  • ^PermitRootLogin correspond à la ligne commençant par PermitRootLogin
  • s/yes/no change la valeur de l'option de "oui" à "non"

4
2017-11-23 21:57





Je veux changer la valeur de "PermitRootLogin" de oui à non.

Dans ce cas, j'utiliserais Perl (c'est-à-dire quelque chose qui fonctionne avec des champs et qui peut être édité sur place; Sed échoue au premier et AWK échoue au second):

sudo perl -i -lane '/^PermitRootLogin/?print("@F[0] no"):print($_)' /etc/ssh/sshd_config
% grep ^PermitRootLogin /etc/ssh/sshd_config                                                     
PermitRootLogin without-password
% sudo perl -i -lane '/^PermitRootLogin/?print("@F[0] no"):print($_)' /etc/ssh/sshd_config
[sudo] password for user: 
% grep ^PermitRootLogin /etc/ssh/sshd_config                                              
PermitRootLogin no

1
2017-11-23 20:35





Vous pouvez les changer avec sed, utilisez l'option -i

sed -i -e 's/old/new/g' file

Voir man sed pour detials

http://www.grymoire.com/Unix/Sed.html


0
2017-11-23 20:09





Si vous voulez dire "sans ouvrir le fichier dans un éditeur", c'est possible.

Par exemple, vous pouvez utiliser sed remplacer les modèles d'expression régulière par des chaînes fixes:

sed 's/REGEX-PATTERN/REPLACE-WITH-THIS-STRING/' /PATH/TO/FILE

La commande ci-dessus imprimera le contenu du fichier avec des lignes substituées. Ce sera n'effectuez pas les substitutions, imprimez simplement un "aperçu"!
Pour appliquer réellement les substitutions après les avoir vérifiées, utilisez le -i ("substitut en place") flag:

sed -i 's/REGEX-PATTERN/REPLACE-WITH-THIS-STRING/' /PATH/TO/FILE

0
2017-11-23 20:11





Tout programme traitant de quelque manière que ce soit avec des fichiers doit obligatoirement émettre open() aussi bien que read() appels système, qui peuvent être vérifiés avec strace. Ouvrir un fichier sans ces appels système est impossible

Votre question apparaît pour demander si un fichier peut être édité sans éditeur de texte. C'est possible, comme d'autres l'ont montré. Ma petite contribution ici est la suivante:

awk '/^PermitRootLogin/{$2="yes"}1' /etc/ssh/sshd_config > /tmp/sshd_config && mv /tmp/sshd_config /etc/ssh/sshd_config

Fondamentalement, avec AWK, nous trouvons la ligne appropriée, remplacez le champ 2, qui est "non" par "oui", tout afficher en fichier tmp et remplacer l'original par le fichier tmp en utilisant mv.

Rappelez-vous que la propriété de ce fichier de configuration appartient à root, vous aurez donc besoin de sudo accès (ajouter sudo avant mv )


0
2017-11-24 00:24





Vous pouvez utiliser Vim en mode Ex:

ex -sc '/^PermitRootLogin/s/yes/no/|x' /etc/ssh/sshd_config
  1. s remplacer

  2. x sauver et fermer


0
2018-04-16 17:01