私は、リモートマシンにログインして秘密鍵と公開鍵を作成するbashスクリプトを作成しています。
私の問題は、リモートマシンの信頼性があまり高くなく、常に稼働しているわけではないことです。 SSH接続が確立されているかどうかを確認するbashスクリプトが必要です。将来使用するためにキーを実際に作成する前。
戻り値sshでこれを確認できます:
$ ssh -q user@downhost exit
$ echo $?
255
$ ssh -q user@uphost exit
$ echo $?
0
編集:別のアプローチはnmapを使用することです(キーやログインスタッフを持っている必要はありません):
$ a=`nmap uphost -PN -p ssh | grep open`
$ b=`nmap downhost -PN -p ssh | grep open`
$ echo $a
22/tcp open ssh
$ echo $b
(empty string)
ただし、メッセージをgrepする必要があります(nmapは、ポートがフィルターされているか、閉じているか、開いているかを示すために戻り値を使用しません)。
EDIT2:
Ssh-portの実際の状態に関心がある場合は、grep open
with egrep 'open|closed|filtered'
:
$ nmap Host -PN -p ssh | egrep 'open|closed|filtered'
完了するだけです。
ssh -q -o "BatchMode=yes" -i /home/sicmapp/.ssh/id_rsa <ID>@<Servername>.<domain> "echo 2>&1" && echo $Host SSH_OK || echo $Host SSH_NOK
このようなものを使用できます
$(ssh -o BatchMode=yes -o ConnectTimeout=5 user@Host echo ok 2>&1)
Ssh接続が正常であれば、これは「ok」を出力します
@Adrià Cidre
の応答を補完することができます:
status=$(ssh -o BatchMode=yes -o ConnectTimeout=5 user@Host echo ok 2>&1)
if [[ $status == ok ]] ; then
echo auth ok, do something
Elif [[ $status == "Permission denied"* ]] ; then
echo no_auth
else
echo other_error
fi
試してください:
echo quit | telnet IP 22 2>/dev/null | grep Connected
リモートフォルダが存在するか、または他のファイルテストが本当にあるかを確認したい場合:
_if [ -n "$(ssh "${user}@${server}" [ -d "$folder" ] && echo 1; exit)" ]; then
# exists
else
# doesn't exist
fi
_
"$(ssh ...)"
の引用符を忘れないでください。
BASH 4+スクリプトを使用した例:
# -- ip/Host and res which is result of nmap (note must have nmap installed)
ip="192.168.0.1"
res=$(nmap ${ip} -PN -p ssh | grep open)
# -- if result contains open, we can reach ssh else assume failure) --
if [[ "${res}" =~ "open" ]] ;then
echo "It's Open! Let's SSH to it.."
else
echo "The Host ${ip} is not accessible!"
fi
https://onpyth.blogspot.com/2019/08/check-ping-connectivity-to-multiple-Host.html
上記のリンクは、Python接続を確認するためのスクリプトを作成することです。同様の方法を使用して使用できます。
ping -w 1 -c 1 "IP Address"
Bashスクリプトを作成するコマンド。
複数のインターフェイスでサーバーに接続するには
ssh -o ConnectTimeout=1 -q [email protected];[ $? = 1 ] || ssh -o ConnectTimeout=1 -q [email protected]
誰かがリモートマシンでポート22が開いているかどうかだけをチェックしたい場合に備えて、この単純なnetcatコマンドは便利です。 nmapとtelnetが利用できないため、私はそれを使用しました。さらに、私のssh構成はキーボードパスワード認証を使用します。
これは、GUESSWHOzによって提案されたソリューションの変形です。
nc -q 0 -w 1 "${remote_ip}" 22 < /dev/null &> /dev/null && echo "Port is reachable" || echo "Port is unreachable"