Le serveur SSH ne répond pas aux demandes de connexion

14

J'essaie de configurer un serveur SSH sur ma machine locale à l'aide d'OpenSSH. Lorsque j'essaie de SSH depuis un hôte distant vers mon serveur SSH local, le serveur SSH ne répond pas et la demande expire. Je suis à peu près sûr qu'il existe une solution vraiment évidente que j'écarte tout simplement.

Voici ce qui se passe lorsque j'essaie de SSH depuis un hôte distant:

yoshimi@robots:/$ ssh -vv [email protected]
OpenSSH_6.7p1 Debian-5, OpenSSL 1.0.1k 8 Jan 2015
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to 99.3.26.94 [99.3.26.94] port 22.
debug2: fd 3 setting O_NONBLOCK
debug1: connect to address 99.3.26.94 port 22: Connection timed out
ssh: connect to host 99.3.26.94 port 22: Connection timed out

Où se robotstrouve mon hôte distant et 99.3.26.94mon serveur SSH local.

SSH est en cours d'exécution

volt@arnold:~$ ps -A | grep sshd
 5784 ?        00:00:00 sshd

arnoldest mon serveur SSH local.

La redirection de port est configurée sur le routeur

J'ai mon routeur domestique configuré pour transférer les ports 80 et 22 vers mon serveur SSH. Fait intéressant, le port 80 a fonctionné sans accroc - va directement au répertoire Web Apache. Port 22 - pas tellement.

NMap dit que c'est filtré

yoshimi@robots:/$ nmap -p 22 99.3.26.94

Starting Nmap 6.47 ( http://nmap.org ) at 2015-06-02 14:45 EDT
Nmap scan report for 99-3-26-94.lightspeed.bcvloh.sbcglobal.net (99.3.26.94)
Host is up (0.33s latency).
PORT   STATE    SERVICE
22/tcp filtered ssh

Nmap done: 1 IP address (1 host up) scanned in 7.59 seconds

Où se robotstrouve mon hôte distant et 99.3.26.94mon serveur SSH local.

Ce n'est pas IPTables (je pense)

volt@arnold:~$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
fail2ban-ssh  tcp  --  anywhere             anywhere             multiport dports ssh
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain fail2ban-ssh (1 references)
target     prot opt source               destination         
RETURN     all  --  anywhere             anywhere            

... Et je n'ai pas d'autre pare-feu en place - c'est un réseau Debian relativement récent.

Alors, que pourrait-il être d'autre? Cela semble certainement être une sorte de pare-feu pour ignorer le trafic, mais si ce n'est pas le routeur, ce n'est pas iptables, et ce n'est pas un autre pare-feu sur le serveur SSH, ... qu'est-ce qu'il y a d'autre?

EDIT: demande de connexion à partir d'une erreur de réseau interne

yoshimi@robots:/$ ssh [email protected]
ssh: connect to host 192.168.1.90 port 22: No route to host
kittykittybangbang
la source
1
Avez-vous essayé SSH depuis un ordinateur derrière le routeur (en interne)? Voir aussi ceci .
saiarcot895
Merci pour le matériel de référence, @ saiarcot895. Voir aussi modifier.
kittykittybangbang
Quelle est l'adresse IP de l'ordinateur avec lequel vous avez essayé de faire ce qui précède ^? Pouvez-vous le cingler?
111 ---
Tout d'abord, vérifiez si quelque chose qui ne prend pas l'adresse arping remotehostdoit répondre à une seule adresse hw, puis vérifiez si hwaddress est la même, puis vérifiez la résolution avec dig remotehostet dig -x remoteip, puis vérifiez si l'hôte distant ne pointe pas vers 127.0.0.1, pour cette vérification, / etc / hosts de remote.Et enfin, essayez de désactiver le pare-feu et vérifiez si le processus ssh est en cours d'exécution.
elbarna
Il peut également être utile de sélectionner tail -fle ou les fichiers journaux sur lesquels vous avez pointé sshd pour la sortie. S'il n'y a absolument rien dans les journaux, c'est probablement un problème entre les deux appareils, pas sur le serveur ssh.
0xSheepdog

Réponses:

18

Une réponse très décevante

Après avoir mis ce problème de côté pendant une journée et y revenir, j'étais à la fois soulagé et perturbé (plus perturbé que soulagé) de constater que tout fonctionnait, mystérieusement, correctement.

Alors, quel était le problème?

Aucun paramètre n'a été modifié ou ajusté - ni sur le routeur, ni sur le serveur SSH, ni sur la machine du client SSH. Il est assez sûr de dire que le routeur ne gère pas correctement le trafic entrant, malgré les paramètres appropriés. Étant donné que le logiciel de routeur domestique dinky n'est pas vraiment conçu pour gérer la redirection de port, il a fallu du temps au pauvre gars pour mettre en œuvre les changements nécessaires.

Mais ça fait 6 heures !!

Ouais mec, je sais. J'ai passé toute la journée à essayer de comprendre ce qui n'allait pas - et je ne l'ai jamais trouvé parce qu'il n'y avait rien de mal. Évidemment, cela peut prendre 6 heures - peut-être plus - pour que les paramètres du routeur prennent effet.

Alors, comment savoir si c'est mon problème?

Un outil astucieux que j'ai rencontré lors de cette escapade est tcpdump. Ce petit gars maigre renifle le trafic pour vous, offrant un aperçu précieux de ce qui se passe réellement. De plus, il a des fonctionnalités de super filtrage qui vous permettent d'affiner exactement ce que vous voulez regarder / rechercher. Par exemple, la commande:

tcpdump -i wlan1 port 22 -n -Q inout

Raconte tcpdumpà chercher du trafic via l'interface wlan1 ( -i« interface » =), que par le port 22, ignorer la résolution de noms DNS ( -n= 'no de résolution de noms), et nous voulons voir à la fois le trafic entrant et sortant ( -Qaccepte in, outou inout; inoutest la valeur par défaut).

En exécutant cette commande sur votre serveur SSH tout en essayant de vous connecter via une machine distante, il devient rapidement clair où se situe précisément le problème. Il y a essentiellement 3 possibilités:

  1. Si vous voyez du trafic entrant de la machine distante, mais pas de trafic sortant de votre serveur local, le problème vient du serveur: il y a probablement une règle de pare-feu qui doit être modifiée, etc.
  2. Si vous voyez à la fois des entrées et des sorties , mais que votre machine distante ne reçoit pas la réponse, c'est probablement le routeur: il autorise le trafic entrant, mais laisse tomber vos paquets sortants.
  3. S'il n'y a aucun trafic , c'est probablement un problème de routeur également: les SYNpaquets de la machine distante sont ignorés et abandonnés par le routeur avant même d'atteindre votre serveur.

Et une fois que vous avez découvert où se situe le problème, une solution est (généralement) triviale.

kittykittybangbang
la source
1
Super sauce pour votre "réponse décevante"! Points bonus pour votre nom d'utilisateur .... J'ai tourné en rond à ce sujet pour deux machines sur le même réseau local! Il s'avère que le routeur Evil Bell est de la merde! Cela me permet de me connecter UNE FOIS seulement. Puis plus tard, quand j'essaye de me reconnecter, il refuse de me router! Je peux même SSH de l'autre façon très bien. Enfin au moins une fois. Je me demande si ça ne marchera pas dans quelques heures aussi ..
Richard Cooke
Wow, j'ai tiré mes cheveux pendant une journée entière à ce sujet - on dirait que j'ai aussi le problème du `` routeur du mal Bell ''. @RichardCooke: quelle était votre solution?
John Doe
@JohnDoe: routeur remplacé. Un modèle Asus qui figure sur la liste de matériel approuvée DD-WRT. Plus de manigances et je vais installer DD-WRT!
Richard Cooke
3

J'utilise Mint (Ubuntu).

J'avais tout fait ... clé publique au format correct dans authorized_keys, chmodding, chowning, redémarrage ssh et sshd etc. Comme cela a été documenté partout.

Pour moi, c'était le pare-feu ufw. L'absence de toute réponse ssh m'a fait basculer, mais je n'ai pu cingler aucun problème dans les deux sens sur un réseau local.

J'ai testé par:

sudo ufw service stop

... et cela a parfaitement fonctionné, c'est-à-dire que j'ai reçu une réponse d'un appel ssh.

Alors, redémarrez ufw:

sudo ufw service start

... et ajoutez la règle:

sudo ufw allow openssh

Tout fonctionne bien maintenant.

Fiddy Bux
la source
Cela ( ufw) a résolu mon problème sur Ubuntu 16.04. J'avais suivi les instructions d'installation de Jenkins à l'aveugle et activé ufwdans le processus. Après l'avoir désactivé, sshd fonctionne à nouveau.
Penghe Geng
1

Si vous, comme moi, avez activé UFW (sous Linux, Ubuntu dans mon cas), essayez ceci:

sudo ufw enable OpenSSH

Cela permettra à OpenSSH dans le pare-feu.

uranibaba
la source
1
Je viens de m'enfermer et je me sens extrêmement stupide. Mais c'était vraiment ça.
martpie
0

Juste pour les autres:

J'ai dû utiliser l'option -P dans tcpdump au lieu de -Q

tcpdump -i wlan1 port 22 -n -P inout
Esel
la source
Je voterai positivement si vous identifiez le nom / la version de distribution que vous utilisez.
Richard Cooke
0

La plupart du temps, le pare-feu est un coupable. Faites service iptables stopet service ip6tables stop.

Si l'arrêt du service ne fonctionne pas, effectuez un rinçage iptable.

iptables --flush.

Si c'est une VM, faites de même sur l'hôte

Vijay SB
la source