eth0의 hwaddr에서 ssh 포트로 사용할 수있는 쉘의 해시 함수


1

ssh home으로 연결하고 터널을 통한 후속 액세스를 허용하기 위해 연결을 설정하여 유지 관리를 위해 원격 시스템에 액세스 할 수있는 원격 시스템이 점점 늘어나고 있습니다.

현재 스크립트를 편집하여 원격 위치에 설치하기 전에 고유 한 정방향 ssh 포트로 이러한 시스템을 수동으로 구성해야합니다. 나머지 설치는 자동화됩니다 (PXE). 이 포트를 수동으로 설정하는 것은 번거롭고 (오류의 위험이 있음), 전체 프로세스를 자신있게 기술 담당자에게 전달하지 못하게합니다.

질문> 깨끗한을 감안할 때, 데비안은 결정하고 (예를 들어 30000-60000)를 어떤 범위에 빠질 것 eth0를에 (말) MAC 주소의 숫자 해시 함수를 작성하는 것이 가능하다 설치하고 당신은 수있는 합리적 (고유 기대 ++). 나는 bash, awk 등을 가지고 있다고 생각한다. 가능한 경우 쉘 관련 도구를 고수하고 싶지만 푸시하면 파이썬을 사용할 수 있습니다.

(++) 첫 번째 포트에서 문제가 발생한 경우 포트를 증가시키기 위해 터널링 스크립트를 수정하려고합니다.

권장 입력 예 : ifconfig eth0 | grep HWaddr | awk '{print $ 5}'== 08 : 00 : 27 : aa : bb : cc

필요한 출력 예 : 34567

답변:


1

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);

이것은 내가 상상했던 것과 거의 비슷하지만 내 perl은 애무하고 있습니다 :) 훌륭하게 작동하고 숫자를 얻지 만 "/tmp/hash.pl 줄의 16 진수로 정수 오버플로가 발생합니다. <IFCONFIG> 1 행. " 이것을 제거 할 수 있습니까?
Aitch

이를 피하기 위해 Math :: BigInt를 사용할 수 있습니다. 추가하겠습니다!
Cakemox

이것은 다소 좋은 대답이지만 약간 더 복잡하지만 잘 작동하지만 터널 스크립트가 perl 인 경우 이상적입니다. 슬프게도 하나만 답변으로 표시 할 수 있습니다.
Aitch

뒤늦은 통찰력과 추가 조사를 통해 실제로 이것이 더 나은 대답입니다. 대답은 결정 론적이며 (매번 동일) 내가 필요한 것을 충족시킵니다. 이것을 별도의 작은 스크립트로 사용하는 것이 한 곳 이상에서이 숫자를 생성해야하기 때문에 그렇게 큰 문제가되지 않으며, 최소한의 "데비안"최소한의 데비안 6.0은 추가 소프트웨어없이 실행합니다
Aitch

2

또한 필요한 작업을 수행해야합니다.

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

당신은 살고 배우고 있습니다. 난 정말 배쉬에서 RANDOM을 보지 못했고, 미리 시드를 할 수도 없었습니다
Aitch

@Aitch : 학습이없는 하루가 낭비됩니다.
user619714

나는 이것을 대답으로 표시하고 있습니다. 이것은 내가 사용한 것과 정확히 같고 쉘을 사용하여 우아하게 간단합니다. 시간을내어 게시 해 주셔서 감사합니다.
Aitch

추가 조사에서이 방법은 결정적이지 않습니다 (매번 동일한 결과)-Debian Squeeze 6.0 root @ myserver : / my / bin # ./portgen.sh 31101 root @ myserver : / my / bin # ./portgen.sh 43840 root @ myserver : / my / bin # ./portgen.sh 32097
Aitch

1
@ Aitch : 나는 무슨 일이 일어나고 있는지 알아 냈습니다. 나는 그것을 테스트하기 위해 데비안 6 시스템을 만들었고이 시스템은 변경 가능한 결과를 주었다. 문제는 bash v3 및 v4가 16 진수 값을 RANDOM에 할당하는 방식의 차이입니다. af로 시작하면 v4는 할당되지 않은 것처럼 작동하고 난수를 인쇄합니다.
user619714

1

나는 당신의 생각을 정말 좋아하고 터널링 스크립트를보고 싶어하지만 내 냉소적 인 사람은 누군가 SSH 키를 언급 할 것이라고 말합니다 :-)

우리는 cssh많은 작은 쉘 윈도우에 사용합니다.


우리는 각 머신에서도 ssh 키를 사용하지만 인증 된 키를 관리하고 추가하는 데 어려움이 있습니다! 일반 키를 사용하는 것을 살펴볼 수 있습니다. 제안한대로 cssh를 살펴본 결과 여러 컴퓨터에서 동시에 실행하는 데 사용되는 것으로 보입니다. 비록 그것을 배제하지는 않지만, 이것이 우리에게 필요한 것은 아닙니다. 포트 문제는 단지 원격 기계를 (예를 들어 문제가 발생했을 때 스왑 아웃을 위해) 더 많은 상품으로 만드는 것입니다.
Aitch

난 너랑 같이있어. 페일 오버와 거의 동일한 박스를 유지하기 위해 약 20 분 분의 tarball-and-drop 구성으로 재고를 확보했습니다. TCP 래퍼를 사용하더라도 동일한 키 접근 방식을 사용하지 않을 것입니다. 항상 포트 노킹이 있습니다! HTH, JR
Jonathan Ross

내가 염두에 둔 한 가지 트릭은 (이것이 약간 OT 임) 머신이 부팅 할 때 config / public 키를 전자 메일 홈으로 보내거나 cfengine 또는 웹 API 등을 사용하는 것입니다. 그렇게하면 키 사본이 생깁니다. 그래서 그들이 원격으로 스위치를 켰을 때, 그들은 문을 두드리고 말을했지만 들어올 수 없었습니다. 나는 그들이 집으로 보낸 설정을 가져 가서 랜딩 패드 기계에 추가 한 다음에 들어갈 수있었습니다. 예,이 방법에는 명백한 결함이 있음을 알고 있습니다!
Aitch

1
헤헤 이 접근법에는 장점이 있습니다. 컴퓨터에 웹 서비스가있는 경우 숨겨진 URL (또는 서비스 관점에서 볼 때 비슷한 로그인 옵션은 쉽게 액세스 할 수 있지만 보안)에 SSL 로그인을 할 수 있습니다. 예를 들어 Google의 2 단계 인증을 보셨습니까? )를 사용하면 지정된 기간 동안 터널 / SSH에 효과적으로 액세스 할 수 있습니다. 포트 노킹 라인을 따라. 예를 들어 한 시간 동안 hosts.allow에 사용자의 소스 IP를 추가하는 웹 기반 SSL 로그인에 대해 들었습니다. HTH, JR
Jonathan Ross
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.