リモートマシンにログインして秘密鍵と公開鍵を作成するbashスクリプトを作成中です。
私の問題は、リモートマシンの信頼性が低く、常に稼働しているとは限らないことです。SSH接続が確立されているかどうかを確認するbashスクリプトが必要です。将来使用するために実際にキーを作成する前。
リモートマシンにログインして秘密鍵と公開鍵を作成する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のポートの実際の状態に興味があるなら、あなたは置き換えることができgrep open
てegrep 'open|closed|filtered'
:
$ nmap host -PN -p ssh | egrep 'open|closed|filtered'
完全にするためだけに。
ssh
ダウンしたホストへのアクセスの試行が、たとえば60秒のタイムアウト後にのみ失敗することについては言及していません。これは、一部の使用法では禁止される場合があります。また、ホスト名がで定義されている~/.ssh/config
場合、最初のssh
アプローチは機能しますが、2番目のnmap
方法はFailed to resolve "<hostname>"
。で失敗します。
$?
ですか?など
ssh -q user@downhost exit | echo $?
エコーにパイプ接続結果
あなたはこのようなものを使うことができます
$(ssh -o BatchMode=yes -o ConnectTimeout=5 user@host echo ok 2>&1)
ssh接続に問題がない場合、これは「ok」を出力します
試してみてください:
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デーモンをより安定させようとしてはいけませんか?monitのようなものを実行してみてください。デーモンが実行されているかどうかを確認し、実行されていない場合は再起動します(sshdがシャットダウンする背後にある根本的な問題を見つける時間を与えます)。それともネットワークサービスは面倒ですか?見てみてくださいman ifup
。Whole Damn Thingはあなたをシャットダウンするのが好きですか?まあ、それはもっと大きな問題です...ログを見て(syslogで始めて)、ハードウェア障害やボックスをシャットダウンしているサービス(おそらく温度モニター?)を見つけてみてください。
スクリプトをフォールトトレラントにすることは素晴らしいことですが、boxenフォールトトレラントにすることもできます。
ssh-keygen
してローカルマシンでssh-copy-id
キーペアを生成し、次に公開キーをリモートマシンにコピーします。あなたは違うことをしているようです。なぜ、あなたの目標は何ですか?