Если я изменю свой порт SSH с 22 на 23453, я больше не смогу использовать ssh.
Более подробно, я использую экземпляр Red Hat EC2 в Amazon Web Services. Это второе изменение при новой установке (первое изменение заключалось в добавлении пользователя без полномочий root).
Я могу нормально использовать ssh, используя Git Bash и локальный файл .ssh / config, я редактирую строку в / etc / ssh / sshd_config, которая в настоящее время говорит
#Port 23453
сказать
Port 23453
затем перезапустите sshd с помощью
sudo service sshd restart
Затем я добавляю строку «Порт 23453» в свой файл .ssh / config.
Host foo
Hostname my-ec2-public-DNS
Port 23453
IdentityFile my ssl key
Если я открываю другую оболочку Git Bash (не закрывая существующее соединение) и пытаюсь подключиться к моему экземпляру по ssh (с помощью ssh foo), я вижу следующую ошибку:
ssh: connect to host my-ec2-public-DNS port 23453: Bad file number
Группа безопасности, прикрепленная к этому экземпляру, имеет две записи, обе TCP
22 (SSH) 0.0.0.0/0
23453 0.0.0.0/0
Я предполагаю, что порт все еще заблокирован моим брандмауэром.
Выход sudo 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
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
Что мне кажется довольно открытым.
ОБНОВИТЬ
После добавления правила iptables
iptables -A INPUT -p tcp --dport 23453 -j ACCEPT
и пытаюсь снова, все равно не повезло.
Выход 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
Что выглядит достаточно открытым. Я не совсем уверен, как искать входящие пакеты или активность в порту. Но выход netstat -ntlp
(как корень)
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
Мне кажется, это показывает sshd на 23453.
Я еще раз проверил, что у экземпляра открыт порт в группе безопасности (порт: 23453, протокол: tcp, источник: 0.0.0.0/0)
Что еще может быть причиной сбоя подключения по SSH?
Ура
POSTMORTEM
Теперь я могу подключиться. Это отсутствующее правило в iptables. Выход iptables -L
теперь выглядит так:
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
У брандмауэра вашего экземпляра этот порт не открыт. Попробуйте следующую команду:
iptables -I INPUT 3 -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 23453 -m state --state New -j ACCEPT
Обратите внимание, что правила iptables необходимо сохранить, чтобы они сохранялись после перезагрузки. В RHEL это:
/sbin/service iptables save
Добавить правило iptables
iptables -I INPUT 1 -p tcp --dport 23435 -j ACCEPT
который принимает трафик с любого хоста через порт 23435 и пытается использовать ssh, если вы видите какие-либо пакеты или активность, это означает, что пакеты достигают вашего сервера.
Если вы не видите пакетов, это означает, что у группы безопасности AWS нет правила, разрешающего ваш порт.
но если вы видите трафик по этому правилу (по iptables -nvL
), то вам нужно запустить "netstat -ntlp" и проверить, работает ли демон SSH на порту 2435. и далее. 0.0.0.0/0
.
надеюсь, эти шаги решат проблему. если все равно нет, то скажи мне.
Вы уверены, что группа безопасности настроена правильно? Вы нажимали «Применить изменения»? Многие люди забывают применить свои изменения :)
«Неверный номер файла» обычно означает тайм-ауты подключения, и настройки iptables выглядят правильно.
Если кто-то наткнется на эту тему, потому что они изменили порт ssh по умолчанию, вот решение, которое сработало для меня:
/etc/ssh/sshd_conf
.