Função hash no shell que pode ser usada para uma porta ssh de (digamos) hwaddr de eth0

1

Eu tenho um número crescente de máquinas remotas que ssh home e estabeleço uma conexão para permitir acesso subseqüente via túnel para que eu possa entrar nelas para manutenção.

Atualmente, devo configurar manualmente essas máquinas com uma única porta ssh de encaminhamento antes de instalar no local remoto editando um script. O restante da instalação é automatizado (PXE). Torna-se cansativo (e arrisca erro) configurar essa porta manualmente e me impede de passar o processo inteiro para um técnico com segurança.

Pergunta > Considerando uma instalação limpa e debian, é possível escrever uma função hash numérica (digamos) do endereço mac em eth0 que seria determinista e cair em algum intervalo (por exemplo, 30000-60000 ) e você poderia razoavelmente esperar ser único (++). Eu acho que tenho bash, awk etc para brincar. Eu preferiria manter ferramentas relacionadas a shell, se possível, mas poderia usar python se for pressionado.

(++) Eu alteraria o script de tunelamento para incrementar a porta se tivesse problemas na primeira porta testada.

Exemplo de entrada sugerida : ifconfig eth0 | grep HWaddr | awk '{print $ 5}' == 08: 00: 27: aa: bb: cc

Exemplo de saída obrigatória : 34567

    
por Aitch 28.03.2011 / 10:50

3 respostas

1

O seu hwaddr é apenas um grande número, então você pode sempre usar esse mod independentemente do seu range e adicionar o offset.

#!/usr/bin/perl

$iface = $ARGV[0] || "eth0";
open(IFCONFIG, "-|") || exec "/sbin/ifconfig", $iface;
while (<IFCONFIG>) {
    if (/HWaddr ([0-9a-f:]{17})/i) {
        ($hwaddr = $1) =~ s/://g;
        $hwint = hex($hwaddr);
        print $hwint % 30000 + 30000, "\n";
    }
}
close(IFCONFIG);

Aqui está a versão Math :: BigInt:

#!/usr/bin/perl -w

use Math::BigInt;

$iface = $ARGV[0] || "eth0";
open(IFCONFIG, "-|") || exec "/sbin/ifconfig", $iface;
while (<IFCONFIG>) {
    if (/HWaddr ([0-9a-f:]{17})/i) {
        ($hwaddr = $1) =~ s/://g;
        $hwint = Math::BigInt->new("0x" . $hwaddr);
        print $hwint % 30000 + 30000, "\n";
    }
}
close(IFCONFIG);
    
por 28.03.2011 / 11:11
2

Isso também deve fazer o que é necessário.

port=$(/sbin/ifconfig eth0 | grep HWaddr | awk '{ print $5 }' | md5sum | cut -d ' ' -f1)
port=${port:25}
let "port = 0x$port"
let "port %= 30000"
let port="$port + 30000"
echo $port
    
por 30.03.2011 / 23:41
1

Eu realmente gosto do seu pensamento e estou curioso para ver o seu script de tunelamento, mas o cínico em mim diz que alguém mencionará as chaves SSH: -)

Apenas usamos cssh para muitas pequenas janelas de shell.

    
por 28.03.2011 / 10:59