1 votos

¿Cómo puedo ejecutar un comando OS X script en Xserves remotos desde un escritorio OS X script?

La respuesta a una pregunta anterior, Acceder y controlar la red de la oficina en casa, los iMacs y los Xserves me dejó con un nuevo problema. Para repasar, tengo un entorno informático compuesto por:

  • iMac de 27" con dos núcleos con Mac OS X 10.6.8
  • 2 Xserves con 2 núcleos cuádruples cada uno que ejecutan Mac OS X Server 10.6.8
  • Todo ello conectado en red a través de Ethernet a una Time Capsule.

Como esta pregunta tiene una aplicación más general que la anterior, pensé que merecía su propio post.


Necesito lanzar y apagar un servicio (en mi caso Wolfram Lightweight Grid Manager, pero esto realmente se aplica a cualquier servicio, programa o aplicación) que necesita ejecutarse en un servidor (o más generalmente, cualquier otra máquina) conectado a mi red (o de nuevo más generalmente, cualquier red a la que uno tenga acceso autorizado).

Necesito tener ese script:

  • Acceder e iniciar sesión en 2 Xserves en mi red local y allí
  • Lanzar un script en los Xserves que a su vez lanzará Wolfram Lightweight Grid Manager

Nota: Tengo este script. Actualmente se ejecuta desde launchd cuando enciendo los Xserves. Sólo necesito controlar su ejecución y asegurarme de que no se ejecuta con más frecuencia de la necesaria para que los Xserves puedan dormir (el gestor de red parece evitar que los Xserves duerman).

En algún momento posterior, tendré que hacer lo mismo que arriba, pero desactivar el servicio en los servidores remotos.

Q U E D E S A R R O L L A D O S :

  • ¿Cómo lo hago?
  • ¿Cómo puedo acceder a una máquina remota, especialmente si no tiene una dirección IP fija?

Tengo los nombres de las máquinas y las credenciales de inicio de sesión.

Yo he hecho muy pocas veces este tipo de cosas.

Se aceptan referencias o ejemplos.

Mis scripts para servidores de OS X nunca llegaron a mucho, así que cualquier orientación es bienvenida.

3voto

Ged Byrne Puntos 481

Por lo tanto, hay varios componentes, que abordaré por partes. El más importante es cómo ejecutar un comando remoto/script. Como IconDaemon señala, SSH es el mejor uso para esto. Incluso hay un medio bastante bueno y seguro de hacer esto sin requerir una contraseña, para propósitos de scripting automatizado.

En aras de la claridad, me referiré a los Xserves como el servidor y su iMac u otra máquina que accede a ellos como el cliente .

Ejecutar un comando Shell en un servidor remoto

  1. En el servidor, abra el Compartir en las Preferencias del Sistema, y marque el Inicio de sesión remoto caja
    • Esto habilita el servidor SSH, lo que nos permite obtener un inicio de sesión de línea de comandos remoto.
  2. En el cliente, abra Terminal.app y escriba lo siguiente, luego presione enter: ssh-keygen -f examplekey
    • Esto crea dos archivos en su directorio principal. examplekey (el privado ) y examplekey.pub (el público clave). Se trata de firmas criptográficas que permitirán a cualquier persona con examplekey para conectarse a su servidor, sin ninguna contraseña. Por esta razón, vamos a restringir qué comandos se pueden ejecutar, pero también debes tener cuidado de mantener el archivo de la clave privada almacenado de forma segura, sólo en los dispositivos que necesitarán ejecutar tu script remoto</strkeep><strkeep>.
  3. En el servidor, abra /Users/YOURUSERNAME/.ssh/authorized_keys en un editor de texto.
    • Asegúrate de hacerlo con cualquier usuario que tenga permisos para ejecutar el script.
  4. En una nueva línea, introduzca command="/path/to/yourscript" seguido de un espacio, y luego pegar el contenido de examplekey.pub
    • El comando entre comillas debe ser lo que quieras que se ejecute (presumiblemente el script para activar/desactivar el Grid Manager).
    • Si tienes dos scripts, uno para encenderlo y otro para apagarlo, tendrás que combinarlos en un scriptsscriptscripts que lo active/desactive, o repetir los pasos 2-4 para crear una segunda tecla, de modo que tengas una para apagarlo y otra para encenderlo.
    • Este comando es el único que puede o será ejecutado; a diferencia de una sesión ssh estándar, el command= no le da un prompt interactivo, sólo ejecuta el comando y se cierra. Queremos esto por razones de seguridad.
  5. Ahora, con todas las piezas en su lugar, podemos ejecutar el comando. En el Terminal del cliente, escribe ssh -i /path/to/examplekey user@serveraddress y ejecutarlo. Si todo se ha configurado correctamente, debería ejecutar tu script, y luego cerrar la conexión.
    • Puede omitir el user@ si los nombres de usuario son los mismos entre el cliente y el servidor.
    • La dirección del servidor puede ser una IP o un nombre de host. La segunda parte de mi respuesta abordará cómo conectarse a través de Internet, cuando no se tiene una IP estática.
    • Si necesita utilizar un puerto no estándar (es decir, no el 22), cambie el comando para leer ssh -i /path/to/examplekey -p PORT user@serveraddress . Puede que lo necesites para la siguiente sección.

Ahora que tienes SSH funcionando, necesitamos una forma de ejecutar esto desde un ordenador remoto.

Acceder a un ordenador de forma remota sin una IP estática

Hay varias formas de hacerlo: puedes acceder a tu iMac a través de Internet mediante VNC/Escritorio remoto y, a continuación, acceder a tus servidores a través de la red local como se ha indicado anteriormente. O puedes acceder directamente a los servidores a través de Internet.

En cualquier caso, necesitarás dos cosas: - Una forma de acceder a tu red local de forma remota, sin tener que rastrear tu IP. - Reenvío de puertos para permitir el acceso a cualquier protocolo que quieras utilizar (SSH, VNC o Apple Remote Desktop).

DNS dinámico

Se trata básicamente de una forma sencilla de darse acceso remoto sin tener que preocuparse de que su ISP le cambie la IP. Te registras en un servicio gratuito, que te da un nombre de dominio que apunta a tu red doméstica. Para controlar el cambio de tu IP, ejecutas un programa cliente que actualiza los registros del servicio cada vez que obtienes una nueva IP pública.

Yo uso DynDNS, pero parece que han suspendido las nuevas inscripciones para su servicio. No-IP parece ser la mejor alternativa.

  1. Crea una cuenta para su servicio "No-IP Free".
  2. Una vez que te hayas registrado, sigue los pasos para añadir un nuevo nombre de host. Anota el nombre de host que elijas, será algo así como myhostexample.no-ip.info .
  3. Descargue el programa de actualización de Mac aquí e instalarlo en un ordenador que vaya a funcionar a menudo. No importa cuál, ya que cualquier cosa en su red doméstica utiliza la misma IP pública, sólo quiere que se ejecute con la suficiente frecuencia para que no se pierda ninguna actualización de su IP pública.

Ahora que tienes una dirección para conectarte a tu red doméstica, tenemos que configurar tu router para permitir el acceso remoto a los servicios que necesitas. Esto depende de cómo quieras conectarte remotamente (SSH, VNC o una combinación). Voy a dar un ejemplo general.

DHCP estático y reenvío de puertos

Para acceder a un ordenador dentro de su red desde Internet, necesitamos permitir cierto tráfico a través del cortafuegos de su router, y tener una dirección a la que enviarlo.

La mayoría de los routers utilizan DHCP para asignar sus direcciones IP locales (si has configurado manualmente tu IP, ya lo sabes y puedes saltarte esta parte). Sin embargo, pueden configurarse para que cada máquina tenga siempre la misma IP (lo que se llama DHCP estático).

Hay una buena guía sobre cómo hacer esto con un Airport Extreme aquí pero debería ser casi idéntico para tu Time Capsule. Ten en cuenta que la parte final de la guía es redundante, y posiblemente indeseable (los tres últimos párrafos y la última captura de pantalla). Querrás hacer esto para cada ordenador al que necesites acceder de forma remota (potencialmente ambos Xserves y tu iMac).

Ahora que tienes configurado el DHCP estático, necesitamos hacer un reenvío de puertos. Los puertos que reenvíes dependen de cómo quieras hacer tu acceso remoto, pero yo sugeriría reenviar SSH a ambos Xserves. De esta manera puedes usar la configuración de SSH en la primera sección desde donde sea que estés. Esta guía cubre cómo habilitarlo en su Time Capsule. - El concepto básico es que puedes reenviar cualquier puerto al que se acceda en tu dirección externa (el myhostexample.no-ip.info que configuramos antes) a cualquier puerto de cualquiera de sus máquinas externas. Así que si usted va a myhostexample.no-ip.info:1234 puede ser redirigido internamente a 192.168.1.9:567. - Para SSH, querrás redirigir algún puerto público arbitrario al puerto 22 en cada uno de tus Xserves. Así que puedes configurar (por ejemplo) el puerto público 9022 para ir al puerto 22 en un Xserve, y usar el puerto público 9122 para ir al puerto 22 en el otro Xserve. Los puertos públicos no importan (sólo tienes que cambiar el comando ssh para que coincida), pero usar el puerto 22 internamente elimina la configuración extra.

Puedes utilizar los mismos principios para permitir otros accesos a tu iMac o Xserves (como VNC o Apple Remote Desktop), sólo tienes que tomar nota de los puertos que necesitas reenviar. http://www.portforward.com es un buen recurso para esto. También ten en cuenta que si estás usando VNC, no está encriptado, así que estarás enviando tu contraseña en claro. Si tienes que usar VNC, busca en Google "VNC SSH tunnelling", que debería darte algunas buenas guías sobre cómo asegurarlo.

Resumen

Una vez que tengas todo esto en su lugar, deberías ser capaz de hacer ssh desde cualquier lugar a tus Xserves y activar tus scripts. Asumiendo que has configurado myhostexample.no-ip.info como tu DNS dinámico y 9022 como tu puerto de reenvío, sólo tienes que ejecutar ssh -i /path/to/examplekey -p 9022 user@myhostexample.no-ip.info .

Espero que te sirva, siento que sea un poco largo, pero creo que he cubierto la mayoría de las bases. Por favor, pregunta si algo no está claro.

1voto

Tendrá que adentrarse en el misterioso mundo de SSH ( S ecure SH ell).

Una vez necesité que un servidor de correo FirstClass ejecutara un script en un servidor de copias de seguridad remoto para iniciar un proceso de copia de seguridad diaria. Un script en el servidor FirstClass primero puso en pausa su disco de almacén de correo en espejo, hizo algunas comprobaciones de cordura para asegurarse de que la pausa se produjo realmente, (hacer una copia de seguridad del almacén de correo en vivo era una receta para el desastre), luego utilizó SSH para ejecutar el script en el servidor de copia de seguridad para iniciar el trabajo de copia de seguridad.

El software de copia de seguridad ejecutaba entonces convenientemente un script posterior al trabajo que, a través de SSH al servidor de FirstClass, desbloqueaba el disco espejo del almacén de correo. Una vez que conseguí los detalles de SSH, (la parte segura fue el hueso duro de roer), funcionó como un encanto durante años hasta que Google se hizo cargo y tuvimos que abandonar FirstClass.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X