12 votos

La mejor manera de ir sobre cómo cambiar la contraseña de root en 3000+ Solaris, AIX, Linux y servidores?

Larga historia corta: Gran corporación, un montón de servidores UNIX/Linux.

He heredado la responsabilidad de un montón de secuencias de comandos que dejó hace un par de años. Uno de ellos era un script que se ejecute cada $X cantidad de meses a nivel global para actualizar la contraseña de root a través de todos nuestros servidores.

El guión es un desastre de secuencia de Comandos de Shell, y Esperar, y se trabaja en el SSH de confianza que se establece entre todos nuestros servidores y una central de comando-y-control de servidor.

El problema es que el guión es un gran lío. La Espera de los comandos están tratando de cuenta para cada posible versión de "passwd" que existe en cualquier UNIX/Linux - y que variar un poco.

Como estamos ampliando y actualizando mucho de nuestra infraestructura, la secuencia de comandos se está poniendo muy difícil de manejar.

Mi pregunta es: ¿hay una manera mejor de hacer esto? Suponiendo que hay una ya establecida SSH confianza, ¿cuál es la mejor manera de cambiar la contraseña de root en 3000+ servidores al mismo tiempo?

3voto

Andrius Puntos 785

El Uso De Puppet.

La marioneta es muy flexible, fácil de mantener y utiliza el protocolo SSL. Puede sonar un poco exagerado y usted tendrá que poner un esfuerzo extra para construir Puppet del sistema.

Pero. Probablemente esta no es la última misa de actualización que va a hacer a estas máquinas. Puppet de voluntad y hace ahorrar un montón de tiempo cuando el número real cualquiera que sea la masa-procedimiento de actualización comienza y los guiones son muy legible/reutilizables.

Al menos esto funcionó para mí unos años y todavía soy capaz de volver a utilizar algunos de los Puppet recetas (también conocido como secuencias de comandos). También lo he usado en un poco entornos más pequeños sólo asegúrese de que cada máquina es en realidad tener un estado conocido.

He probado muchas veces (en muchas empresas) que todos personalizado scripts de implementación convertirse en dolor en el trasero después de un tiempo o cuando el tipo de al lado. Y como siempre que llevar un teléfono celular, la edad scripts y hacer que persiguen.

Si usted piensa que esto suena realmente bien, he aquí una gran Marioneta tutorial con el entorno virtual incluido para empezar.

3voto

salva Puntos 206

Si usted puede escribir en Perl, el módulo Net::OpenSSH::Paralelo permite escribir scripts que realizan acciones en paralelo a un host remoto a través de SSH bastante easyly.

Contiene un script de ejemplo para el cambio de contraseñas que puedes utilizar como base. Como parece que tienes un entorno heterogéneo, te gustaría grupo de los anfitriones por tipo y uso de diferentes diálogo de manejo de sub para cada uno.

3voto

fortezza Puntos 21

He utilizado el módulo de Perl Authen::PAM en un sistema Solaris con gran éxito. Aquí se muestra un ejemplo de secuencia de comandos:

#!/usr/bin/perl

use Authen::PAM;

my $username = 'root';
my $password = '1234567';

die qq{Error: Unknown user\n} unless getpwnam($username);

die qq{Error: You must run this as root.\n} unless ($> == 0);

my $pamh;

sub my_conv_func
{
    my @res;
    while ( @_ )
    {
        my $code = shift;
        my $msg = shift;
        my $ans = "";

        if ($code == PAM_PROMPT_ECHO_OFF() )
        {
            if (($msg =~ /^New Password:/i) or ($msg =~ /^Re-enter new Password:/i))
            {
                $ans = $password;
            }
            else
            {
                die qq{Unknown message: $msg\n};
            }
        }
        else
        {
            print qq{$msg\n};
        }

        push @res, (PAM_SUCCESS(), $ans);
    }
    push @res, PAM_SUCCESS();

    return @res;
}

ref($pamh = new Authen::PAM("passwd", $username, \&my_conv_func)) || die "Error code $pamh during PAM init!";

my $res = $pamh->pam_chauthtok;

print $pamh->pam_strerror($res),"\n" unless $res == PAM_SUCCESS();

exit 0;

1voto

tink Puntos 732

Yo no sé acerca de "mejor", y si es posible para todos los de la no-Linux *nix máquinas en la mezcla, pero has mirado en títere o cfengine para este tipo de actividad?

También hay comerciales (muy caro) herramientas para la gestión de la identidad que hay, de dos que yo he visto/usado en el pasado son Oracle Identity Manager y la Novela equivalente.

1voto

Ricapar Puntos 130

Después de continuar con la investigación de esto, he aprendido un par de cosas...

En primer lugar, esto es realmente una tarea molesta para automatizar, especialmente a través de diferentes entornos. La mayoría de la respuesta correcta a esta pregunta es, probablemente, @tomi: uso de Puppet.

Finalmente, espero que para obtener Puppet para gestionar obras de infraestructura, pero la implementación en toda la empresa a los servidores UNIX de la contraseña de root cambio ahora no es que sea factible de una opción.

Después de leer muchas páginas de manual y un montón de Google-fu, me las arreglé para llegar hasta con un guión que se repite a través de una lista de servidores de destino, se abre una conexión SSH, y ejecuta uno de los siguientes:

# Solaris
# Generate new pass via crypt(newpass,salt) and insert it into /etc/shadow

# AIX
$ echo "root:newpass" | chpasswd -f NOCHECK

# Linux
$ echo "newpass" | passwd root --stdin

# IBM VIO (Virtual I/O)
$ echo "echo \"padmin:newpass\" | chpasswd -f NOCHECK" | oem_setup_env

# IBM HMCs (Hardware Management Consoles)
$ chhmcusr -u hscroot -t passwd -v "newpass"

Hace un poco más de ejecutar esos comandos, pero los de arriba son lo que el trabajo de la magia.

No podía encontrar alguna forma más sencilla de no de forma iterativa cambiar la contraseña en Solaris - por lo que hemos recurrido a la modificación de /etc/shadow sobre la marcha.

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: