abrir una aplicación en un script de shell con sudo

1

Estoy tratando de abrir una aplicación que escucha el puerto 25 dentro de un script de shell. Para escuchar el puerto 25, necesito ejecutar la aplicación con sudo. Entonces intenté lo siguiente:

sudo open appThatNeedsPort25

Me pide mi contraseña y abre la aplicación. El problema es que la aplicación NO se ejecuta como root, por lo que no puede escuchar el puerto 25 ...

¿Qué debo hacer para abrir una aplicación desde un script de shell para que pueda escuchar el puerto 25?

at01
fuente
¿Es esta una aplicación GUI o simplemente un ejecutable de Unix?
Mark
Aplicación GUI, tienen un modo de consola, pero es una consola interactiva
01 de

Respuestas:

0

sudo -b hace que la aplicación se ejecute en segundo plano.

sudo -b appThatNeedsPort25

A diferencia de sudo appThatNeedsPort25 &, sudo se ejecutará en primer plano, por lo que no tendrá problemas con su solicitud de contraseña. Tenga en cuenta que sudo también tiene una -Aopción para pedirle una contraseña a través de una GUI en lugar de hacerlo en el terminal, puede usar esto cuando sudono se ejecuta desde un terminal.

Gilles
fuente
0

Simplemente intente sudo appthatneedsport25, no es necesario usar open cuando se trata de scripts bash o shell. Si es un script interpretado (python ruby, etc.) y no está configurado como ejecutable, siempre puede hacer sudo python scriptname.

ConstantineK
fuente
hmm, ok, puedo ejecutarlo en segundo plano agregando > /dev/null 2>&1 &. Supongo que no me está pidiendo una contraseña porque he estado jugando con sudo ... mi preocupación es ejecutar algo en segundo plano con &problemas cuando me
solicite
No debería, porque obtiene esos privilegios cuando lo ejecutas, y el resto de eso se redirige a nada en este momento. ¿Esta aplicación requiere aportes futuros de usted? ¿Puede decirnos qué es y para qué lo utiliza?
ConstantineK
Es un servidor smtp ficticio para fines de desarrollo. Así que lo probé después de que la contraseña de sudo recordara el tiempo de espera y solo presenta 3 solicitudes y salidas de contraseña. Supongo que primero tengo que ejecutar una aplicación ficticia con sudo ...
at01
Si desea ejecutarlo sin solicitar una contraseña, entonces sí, necesitaría ejecutar una aplicación de antemano para almacenarla en caché, pero ¿por qué no simplemente poner la contraseña después de iniciar el servidor smtp?
ConstantineK
El problema es que el script que ejecuta mi aplicación simplemente se cierra. No se puede hacer sudo appname &. Ejecutarlo en segundo plano no le da la oportunidad de ingresar su contraseña.
at01
0

utilizar sudo open -a appThatNeedsPort25

Am1rr3zA
fuente
Me sale este error:LSOpenURLsWithRole() failed for the application DevNullSmtp.jar with error -10810.
at01
Pruebasudo open -a /path/to/Application.app
styfle
0

Como una alternativa (ligeramente insegura) a sudo, agregue su clave ssh a su usuario raíz y luego puede hacer 'ssh root @ localhost appThatNeedsPort25'.

La primera vez que haga esto, es posible que le solicite la frase de contraseña de la clave ssh, pero después de eso se almacena en caché hasta que reinicie.

Como una optimización adicional, agregue esto a su archivo ~ / .ssh / config:

Host root
    Hostname 127.0.0.1
    User root

Entonces puede simplemente escribir 'ssh root appThatNeedsPort25' en su lugar.

He estado haciendo este truco 'ssh root' durante años y me ha ahorrado innumerables minutos de volver a escribir mi contraseña. :-)

Grebas de Darren
fuente
De hecho, preferiría escribir mi contraseña en este caso
01 de
0

Lo haces asi

sudo /Applications/TextEdit.app/Contents/MacOS/TextEdit /etc/hosts

Alternativamente

#   sudoapp: Runs .app with root privileges
#   --------------------------------------------------------------------
    sudoapp () {
        sudo "$1/Contents/MacOS/$(defaults read "$1/Contents/Info.plist" CFBundleExecutable)" $2
    }

$ sudoapp /Applications/TextEdit.app /etc/hosts

Sergei
fuente