У меня растет количество удаленных машин, которые используют 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);