通常情况下,我会使用以下命令通过 SSH 进入该机器:
ssh [email protected]
我网络中的该服务器被强制在子网中使用 DHCP(134.96.90.0
)。每次它关闭时,我都必须使用以下命令查找可能的 IP:
nmap -sP 123.45.67.0/24
输出:
Starting Nmap 6.40 ( http://nmap.org ) at 2015-10-08 11:13 CEST
Nmap scan report for turning.some-name.de (123.45.67.2)
Host is up (0.00033s latency).
Nmap scan report for drucker-sek.some-name.de(123.45.67.19)
Host is up (0.0010s latency).
Nmap scan report for dhcp90-20.some-name.de (123.45.67.22)
Host is up (0.00036s latency).
Nmap scan report for dhcp90-21.some-name.de (123.45.67.27)
然后我必须手动拨打这个号码:
ssh [email protected]
ssh [email protected]
ssh [email protected]
ssh [email protected]
然后我终于知道它被分配给了123.45.67.22
。
如果我不能给服务器一个静态IP,有没有办法可以自动执行这个疯狂的网络扫描+多次 SSH?(假设我的网络中有 100 台以上的机器)
我可以这样做来获取 IP:
$ nmap -sP 123.45.67.0/24 | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'
但是我该如何编写一个 for 循环或者类似的代码来让 ssh 运行,并在我成功 ssh 进入服务器后停止呢?
我可以完全访问该服务器,但无法访问网络管理员,这就像将任何笔记本电脑插入网络一样,但在这种情况下,笔记本电脑是某种昂贵的机器。我的发行版:
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.3 LTS
Release: 14.04
Codename: trusty
我也尝试过从子网内的另一台机器通过 ssh 获取机器名称:
$ ssh machine-name.some-name.de
ssh: Could not resolve hostname machine-name.some-name.de: Name or service not known
但是在服务器本身上,当我执行 ssh + tab 时,我看到
::1
ff02::1
ff02::2
ip6-allnodes
ip6-allrouters
ip6-localhost
ip6-loopback
machine-name
machine-name.some-name.de
另外,我avahi-daemon
已经在运行了,但似乎广播是在网络端控制的,只有其他几台机器可以广播它们的名称,drucker-sek.some-name.de
例如turning.some-name.de
:
$ sudo avahi-daemon
Daemon already running on PID 824
答案1
那么类似这样的情况怎么样:
#! /bin/bash
for each in `nmap -sP 123.45.67.0/24 | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' `
do
echo $each
nc -w 2 $each 22
if [ $? -eq 0 ]
then
break;
fi
done
ssh $each
该脚本将花 2 秒钟查看 SSH 是否依次在给定的 IP 地址上应答,当它获得第一个成功连接时,它将自动跳出循环并尝试 ssh 连接。
但是,如果您与要查找的 PC 位于同一子网,则有一种更简单的方法来查找 IP 地址 - 使用 ARP 表匹配您的卡的 MAC 地址!