Si je change mon port SSH de 22 à 23453, je ne peux plus faire de ssh.
Plus en détail, j'utilise une instance Red Hat EC2 sur Amazon Web Services. Il s'agit du deuxième changement que j'ai effectué lors d'une nouvelle installation (le premier changement consistait à ajouter un utilisateur non root).
Je peux ssh in fine en utilisant Git Bash et un fichier local .ssh / config, je modifie la ligne dans / etc / ssh / sshd_config qui dit actuellement
#Port 23453
dire
Port 23453
puis redémarrez sshd avec
sudo service sshd restart
J'ajoute ensuite une ligne "Port 23453" mon fichier .ssh / config
Host foo
Hostname my-ec2-public-DNS
Port 23453
IdentityFile my ssl key
Si j'ouvre un autre shell Git Bash (sans fermer ma connexion existante) et tente de ssh dans mon instance (avec ssh foo), je vois l'erreur suivante:
ssh: connect to host my-ec2-public-DNS port 23453: Bad file number
Le groupe de sécurité attaché à cette instance a deux entrées, à la fois TCP
22 (SSH) 0.0.0.0/0
23453 0.0.0.0/0
Ma meilleure supposition est que le port est toujours bloqué par mon pare-feu.
La sortie de sudo iptables -L
est la suivante
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT icmp -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Ce qui me semble assez ouvert.
MISE À JOUR
Après avoir ajouté une règle iptables
iptables -A INPUT -p tcp --dport 23453 -j ACCEPT
et réessayer, toujours pas de chance.
Sortie de iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT icmp -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
ACCEPT tcp -- anywhere anywhere tcp dpt:23453
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Qui semble suffisamment ouvert. Je ne sais pas exactement comment rechercher les paquets qui entrent ou l'activité sur le port. Mais la sortie de netstat -ntlp
(en tant que root)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:56137 0.0.0.0:* LISTEN 948/rpc.statd
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 930/rpcbind
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1012/cupsd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1224/master
tcp 0 0 0.0.0.0:23453 0.0.0.0:* LISTEN 32638/sshd
tcp 0 0 :::36139 :::* LISTEN 948/rpc.statd
tcp 0 0 :::111 :::* LISTEN 930/rpcbind
tcp 0 0 ::1:631 :::* LISTEN 1012/cupsd
tcp 0 0 :::23453 :::* LISTEN 32638/sshd
Ce qui me semble montrer sshd sur 23453.
J'ai vérifié à nouveau que l'instance a le port ouvert dans le groupe de sécurité (Port: 23453, Protocole: tcp, Source: 0.0.0.0/0)
Quoi d'autre peut provoquer l'échec de la connexion via SSH?
À votre santé
AUTOPSIE
Je peux maintenant me connecter. C'était une règle manquante dans iptables. La sortie de iptables -L
maintenant ressemble à ceci:
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT icmp -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere tcp dpt:23453 state NEW
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
la source
iptables -L
(ssh fonctionne) et le secondiptables -L
(ssh est bloqué). Regardez l'ordre des règles dans la chaîne INPUT (les 6 lignes sous la première "cible"), elles sont lues de haut en bas, donc dans le deuxième ensemble de règles, "REJECT all" est frappé avant "ACCEPT tcp dpt: 23453 ". Le troisième ensemble de règles a l'entrée ACCEPT au-dessus, et donc avant, l'entrée REJECT.Réponses:
Votre pare-feu d'instance n'a pas ce port ouvert. Essayez la commande suivante:
Notez que les règles iptables doivent être enregistrées pour persister après un redémarrage. Sur RHEL, c'est:
la source
/sbin/service iptables save
ne fonctionne pas pour moi, même avec sudo.Ajouter une règle iptables
qui accepte le trafic de n'importe quel hôte, par le port 23435, et essayez de ssh, si vous voyez des paquets ou une activité, cela signifie que les paquets atteignent votre serveur.
Si vous ne voyez aucun paquet, cela signifie que le groupe AWS Security n'a pas de règle pour autoriser votre port.
mais si vous voyez du trafic sur cette règle (par
iptables -nvL
), vous devez alors exécuter "netstat -ntlp" et vérifier si le démon SSH s'exécute sur le port 2435. et sur0.0.0.0/0
.nous espérons que ces étapes permettront de résoudre le problème. si toujours non, alors dites-moi.
la source
Êtes-vous sûr que le groupe de sécurité est correctement défini? Avez-vous cliqué sur "Appliquer les modifications"? Beaucoup de gens oublient d'appliquer leurs modifications :)
«Numéro de fichier incorrect» signifie généralement des délais d'attente de connexion et votre configuration iptables semble correcte.
la source
Au cas où quelqu'un tomberait sur ce sujet parce qu'il a changé le port par défaut de ssh, voici une solution qui a fonctionné pour moi:
/etc/ssh/sshd_conf
.la source