Skip to content

Instantly share code, notes, and snippets.

@mvanotti
Last active July 4, 2016 22:06
Show Gist options
  • Save mvanotti/f4c3c6fd7b7f407bacc2 to your computer and use it in GitHub Desktop.
Save mvanotti/f4c3c6fd7b7f407bacc2 to your computer and use it in GitHub Desktop.
Conectarse a algun labo del dc.
#!/usr/bin/perl
#muerte a bash y a perl.
my $maxMaquinas=25; # Cantidad máxima de máquinas
my $maxLabos=7; # Cantidad máxima de laboratorios
my $log=`tail -1 /var/log/maquinas.log`; # Leemos la última fila del archivo de logs
my @parsed = split(' ', $log);
my $estados = $parsed[scalar @parsed - 1];
my $pc = 0;
my $labo = 0;
sub dameMaquina;
my @entrada = split('\.', $ARGV[0]);
#dc.labos.5.4
#Fijarse si puso todos los params, solo el labo, o ninguno.
if (scalar @entrada == 2) {
my @labosConPcs;
my $tmp = 0;
for ($l = 1; $l <= $maxLabos; $l++) {
my @maqs = dameMaquina($l);
if (scalar @maqs > 0) {
$labosConPcs[$tmp] = $l;
$tmp += 1;
}
}
if (scalar @labosConPcs == 0) {
printf STDERR "No hay laboratorios con pc (o no funciona este script).\n";
exit 0;
}
my $index = rand @labosConPcs;
$labo = $labosConPcs[$index];
@maqs = dameMaquina($labo);
$index = rand @maqs;
$pc = $maqs[$index];
} elsif (scalar @entrada == 3) {
$labo = $entrada[2];
@dsp = dameMaquina($labo);
if (scalar @dsp == 0) {
printf STDERR "No hay maquinas disponibles en el labo $labo (o no funciona este script).\n";
exit(1);
}
$index = rand @dsp;
$pc = $dsp[$index];
} else {
$labo = $entrada[2];
$pc = $entrada[3];
}
if ($labo == 0 or $pc == 0) {
printf STDERR "No hay maquinas disponibes (o no funciona el script)\n";
exit 1
}
system("nc -q0 10.2.$labo.$pc 22");
exit 0;
#Recorre todas las maquinas de un labo y se fija cuales estan disponibles.
sub dameMaquina {
my $labo = @_[0];
my @disponibles;
my $cont = 0;
for ($i = 1; $i <= $maxMaquinas; $i++) {
my $estado = substr($estados, $i - 1 + ( ($labo - 1) * $maxMaquinas), 1);
#printf "Labo $labo pc $i estado $estado\n";
if ($estado eq 'L') {
$disponibles[$cont] = $i;
$cont += 1;
}
}
return @disponibles;
}
Host milagro
HostName milagro.dc.uba.ar
User mvanotti
#uso: ssh dc.labo te conecta a alguna pc disponible de algun labo
# ssh dc.labo.3 te conecta a alguna pc disponible del labo 3
# ssh dc.labo.3.2 te conecta a la pc 2 del labo 3.
Host dc.labo*
ProxyCommand ssh -q milagro ./conectarA %h
User mvanotti

Instalacion:

  • Copiar el archivo conectarA en el tu home de linux de la facu

  • Darle permisos de ejecución a conectarA (chmod +x conectarA)

  • Agregar el contenido de config a tu archivo ~/.ssh/config de la pc de tu casa. (si no existe, crealo). Reemplazando mvanotti por tu usuario de linux


La idea es poner en tu máquina local (con la que te queres conectar) la información de .ssh/config en el archivo ~/.ssh/config (si ya tenes algo no lo pises, agregalo al final). Reemplazando mvanotti por tu usuario en milagro. y el script en tu home en los labos del dc

Uso:

ssh milagro -> te conecta a milagro

ssh pc.labo -> busca alguna pc libre en algun labo y te conecta

ssh pc.labo.7 -> busca alguna pc libre en el labo 7 y te conecta

ssh pc.labo.7.2 -> te conecta a la pc 2 del labo 7

Explicación:

En .ssh/config está la configuración de tu cliente ssh.

Cuando te conectes a pc.labo* (pattern) va a usar como comando proxy (para establecer la conexión ssh):

"Primero me conecto a milagro por ssh y luego ejecuto el script conectarA pasandole como parámetro el nombre del host" (ej: conectarseA pc.labo.5

conectarA lee del archivo de máquinas disponibles (el mismo que usa verMaquinas) las pcs que están disponibles en base a los parámetros especificados (si elegiste un labo, si no elegiste un labo, etc).

una vez hecho esto, establece una conexión pelada con nc, y SSH usa esa conexión.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment