A continuación se muestra el script que estoy tratando de ejecutar, que se ejecuta sin ningún problema.
for i in `seq 200 2100`
do
usr=(`ssh -t -t -o ConnectTimeout=60 machine$1 finger | tail -1 | awk '{print$1}'`)
echo $usr
done
Pero una vez que lo agrego a crontab, no me da el usuario.
22 12 * * * sh /home/subrahmanyam/Scripts/who.sh
Por favor, da tus pensamientos .....
puede que se esté ejecutando cron demon, por lo que debemos incluir algunos archivos binarios ...
shell
ssh
cron
authentication
Gilles 'SO- deja de ser malvado'
fuente
fuente
Respuestas:
Puede hacer conexiones ssh dentro de una sesión cron. Lo que necesita es configurar una autenticación de clave pública para tener acceso sin contraseña. Para que esto funcione, debe tener
PubkeyAuthentication yes
en cada servidor remotosshd_config
.Puede crear un par de claves privadas / públicas con o sin frase de contraseña. Si usa una frase de contraseña (recomendada), también debe iniciar ssh-agent. Sin una frase de contraseña, solo necesita agregar el parámetro
-i your_identity_file
a lassh
línea de comando.ssh
se usará$HOME/.ssh/id_rsa
por defecto.Repliqué tu ejemplo usando un par de claves con una frase de contraseña. Así es como lo hice.
1) Creó el par de claves con frase de contraseña. Guardado la clave privada como
~/.ssh/id_rsa_test
, que debería tener los permisos correctos por defecto. Podemos ingresar una frase de contraseña vacía para no usar una.2) Envió la clave pública a los servidores, hizo lo mismo para todos ellos. Recuerde que necesitan tener
PubkeyAuthentication
habilitado.3) Ejecute ssh-agent como servicio con
-s
. Esto no lo matará si cierra sesión. Su salida es un script de shell válido, que configura el entorno para que el cliente ssh sepa cómo conectarse a él. Lo guardamos en un archivo (solo se necesita la primera línea).4) Cargué lo anterior en nuestro entorno actual para que podamos usarlo
ssh-add
para agregar nuestra clave privadassh-agent
. la frase de contraseña de arriba.5) Verificado se agrega.
6) El script que utilicé, ligeramente modificado que el tuyo. Tenga en cuenta que no incluí el comando ssh entre paréntesis y no utilicé backticks
$()
, que es una mejor alternativa para la sustitución de comandos (esto esbash
compatible, no mencionó qué shell está usando). Usé exactamente el mismo comando ssh que el tuyo.7) Mi crontab (tenga en cuenta que mi
sh
es realmentebash
)8) La salida
El único problema con el uso de una frase de contraseña es que debe ingresarla manualmente al menos una vez. Por lo tanto, lo anterior no funcionará automáticamente después de un reinicio.
fuente
¿Quién escribe la contraseña? El trabajo cron no puede llegar a su agente ssh, por lo que la clave pública no funcionará.
Debe proporcionar
ssh
un archivo de clave explícitamente (consulte la-i
opción), ya que no puede consultar a un agente; y esa clave debe tener una frase de contraseña vacía.fuente
/dev/tty
para leer la contraseña en lugar destdin
; eso no funcionará desde cron.known_hosts
? Pero sí, debe tener cuidado con los permisos: el archivo de clave privada debe ser el modo 0600 o incluso 0400, de su propiedad. Si necesita otro usuario para poder usarlo también, tendrá que buscar en ACL POSIX o similar.kinit
dentro del trabajo cron. Dicho esto, las pestañas también requieren el mismo cuidado en los permisos; perossh
al menos no se quejarán de ellos.En lugar de almacenar un archivo temporal como forcefsck lo hizo, prefiero usar
find
para buscar en el agente activo.En el tema de un script que necesita
ssh-agent
, utilizo:Busca el
ssh-agent
zócalo y devuelve el primero. Está restringido solo al usuario actual, por lo tanto, no intentará accidentalmente utilizar a otros usuarios y obtendrá un error de permiso denegado. También deberías haber iniciado sesión con un activossh-agent
. (Ubuntu inicia un agente cuando se inicia la GUI).Si coloca esto en otro script, deberá llamarlo con
source
o.
porque necesita establecer laSSH_AUTH_SOCK
variable.fuente
Use ssh-cron para configurar conexiones SSH programadas para proteger los servidores sin exponer sus claves SSH, pero usando el agente SSH.
fuente
Puede ejecutar su script o comando en crontab como:
o
fuente