34 votos

La automatización de ssh-copy-id

He arbitraria en el número de servidores con el mismo usuario/pass combinación. Quiero escribir una secuencia de comandos (lo que yo llamo una vez), de modo que

ssh-copy-id user@myserver

se llama para cada servidor. Ya que todos ellos tienen el mismo user/pass esto debería ser fácil, pero ssh-copy-id quiere que yo escriba la contraseña por separado cada vez que derrota el propósito de mi script. No hay ninguna opción para poner la contraseña, es decir, ssh-copy-id -p mypassword user@myserver.

¿Cómo puedo escribir una secuencia de comandos que se rellena automáticamente en el campo de la contraseña cuando ssh-copy-id pide?

33voto

quanta Puntos 31979

Echa un vistazo a sshpass. Coloque su contraseña en un archivo de texto y hacer algo como esto:

$ sshpass -f password.txt ssh-copy-id user@yourserver

2voto

Austin Puntos 1813

Este es un problema con ssh-copy-id; también agrega una clave cada vez que se ejecute. Si usted está automatizando el proceso, el archivo authorized_keys rápidamente se llena de duplicados de las llaves. Aquí es un programa en Python que evita los problemas de ambos. Se ejecuta desde el servidor de control y pone las llaves de un servidor remoto en otro servidor remoto.

import subprocess
def Remote(cmd,IP):
    cmd = '''ssh root@%s '''%(IP)+cmd
    lines = subprocess.check_output(cmd.split())
    return '\n'.join(lines)
source = '123.456.78.90'
target = '239.234.654.123'
getkey = 'cat /root/.ssh/id_rsa.pub'
getauth = 'cat /root/.ssh/authorized_keys'
sourcekey = Remote(getkey, source).replace('\n','').strip()
authkeys = Remote(getauth, target).replace('\n','').strip()
if sourcekey not in authkeys: 
    keycmd=''' echo "%s" >>/root/.ssh/authorized_keys; 
    chmod 600 /root/.ssh/authorized_keys '''%(sourcekey) # A compound shell statement
    print 'Installed key', Remote(keycmd,target)
else: print 'Does not need key'

1voto

MonkeeSage Puntos 391

Usted puede utilizar esperar para escuchar el mensaje de la contraseña y enviar su contraseña:

#!/usr/bin/expect -f
spawn ssh-copy-id $argv
expect "password:"
send "YOUR_PASSWORD\n"
expect eof

Guardar la secuencia de comandos, hacerlo ejecutable, y lo llaman como: ./login.expect user@myserver

1voto

MikeyB Puntos 26178

Uno de los paralelos de las herramientas SSH (clusterssh, mssh, pssh) puede ser apropiada para usted.

Por ejemplo, el uso de cssh para iniciar sesión en todos los equipos y anexar la clave de ti mismo.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: