我有越来越多的远程机器ssh回家,并build立一个连接,以便随后通过隧道访问,所以我可以进入维修。
目前,我必须通过编辑脚本在远程位置安装前使用唯一的前向ssh端口手动configuration这些机器。 其余的安装是自动的(PXE)。 它会让人手动设置这个端口变得很烦人(并且冒着错误),并且阻止我自信地把整个过程交给一个技术人员。
问题>给一个干净的,debian安装是可行的,编写一个数字散列函数(例如)在eth0上的MAC地址,这是确定性的,并落在一定范围内(比如30000-60000),你可以合理地期望是唯一的++)。 我想我已经有bash,awk等玩了。 如果可能,我宁愿坚持使用shell相关的工具,但如果推送的话可以使用python。
(++)我会修改隧道脚本来增加端口,如果它尝试第一个端口有问题。
示例build议的input :ifconfig eth0 | grep HWaddr | awk'{print $ 5}'== 08:00:27:aa:bb:cc
示例所需输出 : 34567
你的hwaddr只是一个很大的数字,所以你可以随时使用那个mod,不pipe你的范围是多less,并加上偏移量。
#!/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);
这也应该做什么要求。
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很多小的shell窗口。