web-dev-qa-db-ja.com

ネットワークをスキャンし、SSH経由でアクセスするまで各IPをSSH接続します

通常、私は以下を使用してそのマシンにSSHで接続します。

ssh [email protected]

ネットワーク内のそのサーバーは、サブネット(134.96.90.0)でDHCPを使用するように強制されています。そして、シャットダウンするたびに、次を使用して可能な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}' 

しかし、サーバーに正常にsshされたときに、forループなどを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
alvas

次のようなものはどうですか?

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

このスクリプトは、SSHが指定されたIPアドレスで順番に応答するかどうかを確認するために、2秒かかります。最初に成功した接続に到達すると、自動的にループから抜け出し、SSHで接続を試みます。

ただし、探しているPCと同じサブネット上にいる場合は、IPアドレスを見つける簡単な方法があります。ARPテーブルを使用してカードのMACアドレスを照合してください。

1
davidgo