Назад | Перейти на главную страницу

Хеш-функция в оболочке, которая может использоваться для порта ssh из (скажем) hwaddr из eth0

У меня растет количество удаленных машин, которые используют ssh-home и настраивают соединение, чтобы разрешить последующий доступ через туннель, чтобы я мог подключиться к ним для обслуживания.

В настоящее время я должен вручную настроить эти машины с уникальным прямым ssh-портом перед установкой в ​​удаленном месте, отредактировав сценарий. Остальная часть установки автоматизирована (PXE). Установка этого порта вручную становится утомительной (и может привести к ошибке), что не позволяет мне уверенно передать весь процесс технику.

Вопрос> Учитывая чистую установку debian, возможно ли написать числовую хеш-функцию (скажем) MAC-адреса на eth0, которая будет детерминированной и попадет в некоторый диапазон (скажем, 30000-60000), и вы могли бы разумно ожидать быть уникальным (++). Думаю, у меня есть bash, awk и т. Д., Чтобы поиграть. Я бы предпочел придерживаться инструментов, связанных с оболочкой, если это возможно, но мог бы использовать python, если их подтолкнуть.

(++) Я бы изменил сценарий туннелирования, чтобы увеличить порт, если бы у него были проблемы с первым портом.

Пример предлагаемого ввода: ifconfig eth0 | grep HWaddr | awk '{print $ 5}' == 08: 00: 27: aa: bb: cc

Пример обязательного вывода: 34567

Это также должно делать то, что требуется.

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

Мне действительно нравится ваше мышление, и мне любопытно увидеть ваш скрипт туннелирования, но циник во мне говорит, что кто-то упомянет SSH-ключи :-)

Мы просто используем cssh для множества маленьких окон ракушки.

Ваш hwaddr - это просто большое число, поэтому вы всегда можете просто взять этот мод независимо от вашего диапазона и добавить смещение.

#!/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);

Вот версия 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);