コマンドとディスク容量が非常に制限されているLinuxシステムがたくさんあります。しかし、コマンドがありますtelnet
。
各プローブにリモートで(プログラム的に)接続し、SSHを介して1行のLinuxコマンドを実行しました。
特定のコンピュータに接続するには、Telnetを使用して単一のコマンドを実行する必要があります。その後すぐに切断します。。
できますが、今すぐ切断部分。 Telnet は、コンソールや端末の種類を開いていますが、Telnet コマンドを実行してすぐに切断することを知ることはできません。
これにより、テキスト出力を簡単に解析して、指定されたポートのコンピュータに接続できないというエラーメッセージを表示できます。これが私が探しているものです。
それでは、Telnetを使用してコンピュータに接続した後に切断するために1行のコマンドをどのように実行しますか?
答え1
exit
次のコマンドをパイプで接続できる必要がありますtelnet
。
echo 'exit' | telnet {site} {port}
動作していることを確認してください。 (私のWebサーバーでは動作しているようですが、YMMV)。
答え2
最も簡単で簡単な方法は次のとおりです。
sleep <n> | telnet <server> <port>
n
- 自動的に終了する前に待機する秒数。 0.5のような素数にすることができます。一部の必須出力は、指定された待機時間内に返されない場合があります。したがって、それに応じて増加する必要があるかもしれません。server
– 宛先サーバーの IP またはホスト名。port
- 宛先サービスのポート番号。
次のように出力をファイルにリダイレクトすることもできます。
sleep 1 | telnet <server> <port> > output.log
答え3
私の場合、これはうまくいきます。 (セントOS 7):
while read host port; do
r=$(bash -c 'exec 3<> /dev/tcp/'$host'/'$port';echo $?' 2>/dev/null)
if [ "$r" = "0" ]; then
echo "$host $port is open"
else
echo "$host $port is closed"
exit 1 # To force fail result in ShellScript
fi
done
答え4
これは別のバージョンです上記で回答しましたこれは「一般的な」Telnet構文と同様に機能します。私の答えが好きなら、この答えではなく元の答えを提供してください。
#!/bin/bash
if [ "$2" == "" ]; then
echo "Syntax: $0 <host> <port>"
exit;
fi
host=$1
port=$2
r=$(bash -c 'exec 3<> /dev/tcp/'$host'/'$port';echo $?' 2>/dev/null)
if [ "$r" = "0" ]; then
echo "$host $port is open"
else
echo "$host $port is closed"
exit 1 # To force fail result in ShellScript
fi