Forzar sshd habilitado al inicio del sistema– script force-at-boot-enable-ssh.sh



  • Hola

    Enlazando con el hilo: Montar un disco automaticamente al bootear https://forum.pfsense.org/index.php?topic=120907.0

    Una demo de como ejecutar un shell script (.sh) al inicio del sistema en pfSense:*

    Por ejemplo:
    Forzar sshd habilitado al inicio del sistema – script force-at-boot-enable-ssh.sh

    #!/bin/sh
    # force-at-boot-enable-sshd.sh
    # @javcasta – 2016 – https://javcasta.com/
    # source code /etc/rc.initial
    # host this script at /usr/local/etc/rc.d/force-at-boot-enable-ssh.sh
    # add execution privilege: chmod +x /usr/local/etc/rc.d/force-at-boot-enable-ssh.sh
    # Check to see if SSH is running.
    if pgrep -q -a -F /var/run/sshd.pid sshd >/dev/null 2>&1; then
    echo “already enable sshd”;
    else
    #run unattended php -f /etc/rc.initial.toggle_sshd
    yes | php -f /etc/rc.initial.toggle_sshd
    fi
    

    El script se aloja en **/usr/local/etc/rc.d/**force-at-boot-enable-ssh.sh

    Se le dan permisos de jecución

    chmod +x /usr/local/etc/rc.d/force-at-boot-enable-ssh.sh
    

    [2.3.2-RELEASE][root@pfSense232a.localdomain]/usr/local/etc/rc.d: ./force-at-boot-enable-ssh.sh
    already enable sshd

    Reloading firewall rules. done.
    [2.3.2-RELEASE][root@pfSense232a.localdomain]/root: yes | php -f /etc/rc.initial.toggle_sshd
    SSHD is currently disabled.  Would you like to enable? [y/n]?
    Writing configuration… done.

    Enabling SSHD...
    Reloading firewall rules. done.

    Y al inicio del sistema de pfSense, si no esta habilitado sshd, se habilita (de forma no atendida).

    Salu2



  • Probado,  va bien, pero en una actualización de pfsense  hay que acordarse de reintroducir el script en /usr/local/etc/rc.d/



  • Hola

    Me has dado una idea, definir un o unos comandos en <shellcmd>(que al guardarse en config.xml, serian perdurables) que comprueben si los scripts que uno quiere estan en el sistema sino que los baje de una web y los ejecute. :)

    Otra alternativa seria el paquete system patches, creo.

    Salu2</shellcmd>



  • Hola

    Para que sea persistente el script vía config.xml (y se mantenga en un Update), una posible solución:

    Alojar force-at-boot-enable-ssh.sh en un servidor web: http://un-servidor.com/carpeta/force-at-boot-enable-ssh.sh

    En config.xml introducir en etiquetas <shellcmd>(donde corresponda):

    <shellcmd>[ ! -f /usr/local/etc/rc.d/force-at-boot-enable-ssh.sh ]  && /usr/bin/fetch -q -o /usr/local/etc/rc.d/force-at-boot-enable-ssh.sh “http:/un-servidor.com/carpeta/force-at-boot-enable-ssh.sh” || /bin/chmod +x /usr/local/etc/rc.d/force-at-boot-enable-ssh.sh</shellcmd>
    <shellcmd>[ -f /usr/local/etc/rc.d/force-at-boot-enable-ssh.sh ]  && /bin/chmod +x /usr/local/etc/rc.d/force-at-boot-enable-ssh.sh ||echo "nada a hacer"</shellcmd>
    

    Que lo que hace es: Si no existe el fichero /usr/local/etc/rc.d/force-at-boot-enable-ssh.sh lo descarga, sino: si existe le da permisos de ejecución. Y vuelvo a comprobar si existe, y le doy permisos de jecución.

    No lo he probado, pero lo que no sé es si pfSense ejecuta primero al boot los ficheros de /usr/local/etc/rc.d/ o las entradas <shellcmd>del config.xml</shellcmd> … seria importante saberlo o probar la funcionalidad de esta idea :)

    Salu2</shellcmd>



  • Hola

    Ya he comprobado el orden de ejecución de las 3 opciones de pfSense para lanzar un comando o script al inicio.
    Es la siguiente:

    1- /usr/local/etc/rc.d/.sh
    2- <earlyshell>3- <shellcmd>4- /usr/local/etc/rc.d/
    .sh</shellcmd></earlyshell>

    Parece que los sh scripts en /usr/local/etc/rc.d/ se ejecutan dos veces, en primer orden y otra vez, tras shellcmd y earlyshellcmd

    Definí en config.xml

    	<earlyshellcmd>echo "I am earlyshell" >> /order.tmp</earlyshellcmd>
    	<shellcmd>echo "I am shellcmd" >> /order.tmp</shellcmd>
    
    

    Creeé un script con permisos de ejecución en /usr/local/etc/rc.d/order.sh con

    	#!/bin/sh
    	echo "I am /usr/local/etc/rc.d/order.sh" >> /order.tmp; 
    

    Y el volcado de /order.tmp

    cat /order.tmp
    

    I am /usr/local/etc/rc.d/order.sh
    I am earlyshell
    I am shellcmd
    I am /usr/local/etc/rc.d/order.sh

    Salu2