Je suis en train de créer un script bash qui se connecterait aux machines distantes et créerait des clés privées et publiques.
Mon problème est que les machines distantes ne sont pas très fiables et qu'elles ne sont pas toujours opérationnelles. J'ai besoin d'un script bash qui vérifierait si la connexion SSH est en place. Avant de créer les clés pour une utilisation future.
bash
ssh
connection
chutsu
la source
la source
ssh-keygen
pour générer une paire de clés sur la machine locale, puisssh-copy-id
pour copier la clé publique sur des machines distantes. Il semble que vous faites les choses différemment. Pourquoi, quel est votre objectif?Réponses:
Vous pouvez vérifier cela avec la valeur de retour que ssh vous donne:
$ ssh -q user@downhost exit $ echo $? 255 $ ssh -q user@uphost exit $ echo $? 0
EDIT: Une autre approche serait d'utiliser nmap (vous n'aurez pas besoin d'avoir de clés ou de login-stuff):
$ 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)
Mais vous devrez grep le message (nmap n'utilise pas la valeur de retour pour montrer si un port a été filtré, fermé ou ouvert).
EDIT2:
Si vous êtes intéressé par l'état réel du port ssh, vous pouvez le remplacer
grep open
paregrep 'open|closed|filtered'
:$ nmap host -PN -p ssh | egrep 'open|closed|filtered'
Juste pour être complet.
la source
ssh
un hôte en panne échoue uniquement après un délai d'expiration de 60 secondes, par exemple, ce qui peut être prohibitif pour certaines utilisations. De plus, si un nom d'hôte est défini dans~/.ssh/config
, la premièressh
approche fonctionne tandis que la secondenmap
échoue avecFailed to resolve "<hostname>"
.$?
? etcssh -q user@downhost exit | echo $?
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
la source
Vous pouvez utiliser quelque chose comme ça
$(ssh -o BatchMode=yes -o ConnectTimeout=5 user@host echo ok 2>&1)
Cela affichera "ok" si la connexion ssh est correcte
la source
En complément de
@Adrià Cidre
votre réponse, vous pouvez faire: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
la source
Essayer:
echo quit | telnet IP 22 2>/dev/null | grep Connected
la source
La
ssh
commande ci-dessous doit avoir un code de sortie0
sur une connexion réussie et une valeur différente de zéro dans le cas contraire.ssh -q -o BatchMode=yes [email protected] exit if [ $? != "0" ]; then echo "Connection failed" fi
la source
Juste au cas où quelqu'un souhaite seulement vérifier si le port 22 est ouvert sur une machine distante, cette simple commande netcat est utile. Je l'ai utilisé car nmap et telnet n'étaient pas disponibles pour moi. De plus, ma configuration ssh utilise l'authentification par mot de passe du clavier.
C'est une variante de la solution proposée par GUESSWHOz.
nc -q 0 -w 1 "${remote_ip}" 22 < /dev/null &> /dev/null && echo "Port is reachable" || echo "Port is unreachable"
la source
Si vous souhaitez vérifier qu'un dossier distant existe, ou tout autre test de fichier vraiment:
if [ -n "$(ssh "${user}@${server}" [ -d "$folder" ] && echo 1; exit)" ]; then # exists else # doesn't exist fi
N'oubliez pas les guillemets
"$(ssh ...)"
.la source
Pour se connecter à un serveur avec plusieurs interfaces
la source
Exemple utilisant le script 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
la source
https://onpyth.blogspot.com/2019/08/check-ping-connectivity-to-multiple-host.html
Le lien ci-dessus consiste à créer un script Python pour vérifier la connectivité. Vous pouvez utiliser une méthode similaire et utiliser:
ping -w 1 -c 1 "IP Address"
Commande pour créer un script bash.
la source
J'ai l'impression que vous essayez de résoudre le mauvais problème ici. Ne devriez-vous pas essayer de rendre les démons ssh plus stables? Essayez d'exécuter quelque chose comme monit , qui vérifiera si le démon est en cours d'exécution et le redémarrera si ce n'est pas le cas (vous donnant le temps de trouver le problème racine derrière l'arrêt de sshd). Ou le service réseau est-il gênant? Essayez de regarder
man ifup
. The Whole Damn Thing aime-t-il juste s'arrêter sur vous? Eh bien, c'est un plus gros problème ... essayez de regarder vos journaux (commencez par syslog) pour trouver des pannes matérielles ou des services qui éteignent votre boîte (peut-être un moniteur de température?).Rendre vos scripts tolérants aux pannes est génial, mais vous voudrez peut-être aussi rendre votre boxen tolérant aux pannes.
la source