Estoy intentando automatizar la configuración de ciertos parámetros en mi /etc/ssh/sshd_config
archivo, sobre todo el
#PermitRootLogin yes
y
#LoginGraceTime 2m
Deberían leer:
PermitRootLogin no
LoginGraceTime 60
No soy un genio de los guiones, así que tengan paciencia conmigo...
He intentado sed -e 's/#LoginGraceTime 2m/LoginGraceTime 60/' /etc/ssh/sshd_config
poner la bola en marcha, pero obtengo un resultado extraño. Simplemente elimina el archivo en el que estoy intentando trabajar...
¿Alguien puede explicarme cómo usar sed?
Respuesta1
Redirigir la salida a un archivo temporal, luego cambiar el nombre del archivo temporal al archivo original
sed -e 's/#LoginGraceTime 2m/LoginGraceTime 60/' /etc/ssh/sshd_config > /etc/ssh/sshd_config.tmp && mv -f /etc/ssh/sshd_config.tmp /etc/ssh/sshd_config
O si tienes GNU sed
puedes usar la -i
opción de edición in situ
sed -i -e 's/#LoginGraceTime 2m/LoginGraceTime 60/' /etc/ssh/sshd_config
Respuesta2
Similar a la respuesta de @Bodo, pero esta solución deja la línea original intacta y agrega la versión modificada debajo de la línea original. Esto sólo tiene sentido si desea conservar la línea original como comentario.
sed -i'' -n 'p;s/#\(LoginGraceTime\) 2m/\1 60/p;s/#\(PermitRootLogin\) yes/\1 no/p' /etc/ssh/sshd_config
Aquí usamos un grupo de captura \(...\)
que se sustituye por \1
en el reemplazo (porque somos demasiado vagos para escribir la misma cadena nuevamente).
Sed con la opción -n
solo genera las líneas impresas explícitamente, por lo que la primera p
se usa para imprimir las líneas no modificadas y los dos comandos siguientes para imprimir las líneas modificadas.