Як усунути помилку "Відмовлено у з'єднанні" на 22-му порту Linux
10:04, 10.05.2024
Адміністрування сервера в системі Linux не завжди є бездоганним процесом, час від часу можуть виникати певні проблеми та помилки. Тут ми поділимося нашим практичним досвідом щодо помилки "відмовлено у з'єднанні". Коли виникає така проблема, це означає, що з'єднання по протоколу SSH не може бути здійснено, і вам краще дотримуватися деяких професійних рекомендацій, щоб вирішити цю проблему за допомогою методичного підходу.
Оцінка підключення клієнта
Щоб почати вирішувати цю проблему, необхідно провести тестування на стороні клієнта. Для цього ми детально розповімо про використання telnet та ping.
Тест доступності сервера за допомогою Ping
Перше, що можна зробити для тестування, це використати ping і IP або ім'я хоста, щоб визначити, чи можна достукатися до сервера. Ось як це можна зробити:
$ ping 11.321.44.2
Якщо сервер доступний, ви отримаєте додаткову інформацію, а також статистику пінгу. Однак, у випадку відсутності відповіді на цю команду, це не гарантує на 100%, що сервер недоступний.
Перевірка доступності порту за допомогою Telnet
Ще одним чудовим варіантом є перевірка доступності порту за допомогою команди telnet, яка використовує текстове з'єднання. Отже, давайте скористаємося наступною командою для перевірки стандартного SSH-порту:
$ telnet 11.321.44.2 22
Якщо з'єднання успішно встановлено, то ви побачите інформацію про операційну систему і програмне забезпечення SSH-сервера. Якщо спроба не вдалася і ви не отримали цих даних, це не означає, що сервер недоступний.
Перевірка конфігурації SSH-сервера
Тепер давайте перевіримо, чи правильно функціонує порт SSH, переглянувши конфігурацію сервера за допомогою:
$ grep Port /etc/ssh/sshd_config
Port 2222
Тут ми не використовуємо порт 22 за замовчуванням. Тоді використовуйте наступний рядок:
$ ssh -p 2222 user_name@ourserverip
Цей порт можна легко змінити на порт за замовчуванням за допомогою кнопки :
$ grep Port /etc/ssh/sshd_config
Port 22
Після цього вам залишиться лише перезапустити систему за допомогою systemctl. Після цього можна буде підключитися через порт за замовчуванням:
$ sudo systemctl restart sshd
Перевірка стану служби SSH
Наступним кроком у нашій процедурі буде перевірка служби SSH і перегляд статусу встановлення.
Перевірка стану служби SSH
Перевірка стану дуже проста і повинна містити наступний рядок:
$ systemctl status ssh
Виведення в цей рядок має містити всі деталі про дані процесу, поточний стан, події журналу, а також конфігурацію. Якщо ви не маєте такого детального виводу і сервер не запущено, ви можете скористатися наступною командою:
$ sudo systemctl start sshd
На додаток до цього, може знадобитися також увімкнути службу SSH:
$ sudo systemctl enable sshd
В кінці слід виконати перезавантаження, і ви можете спробувати перевірити стан ще раз.
Налаштування та перевірка брандмауера
Ще одне пояснення цієї помилки може бути пов'язане з блокуванням брандмауера. Тому нам потрібно вказати інструмент, який контролює наш доступ до системи.
Використання брандмауера ufw
Щоб перевірити, чи немає блокування SSH-трафіку, скористайтеся наступною командою:
$ sudo ufw status
Переглянувши висновок, ви побачите, чи дозволений трафік і звідки. Якщо ви не можете побачити цю інформацію, то спробуйте спочатку відкрити порт за замовчуванням за допомогою:
$ sudo ufw allow 22
Потім зробіть перезавантаження і спробуйте ще раз:
$ sudo ufw reload
Налаштування брандмауера iptables
Наступним кроком у цьому процесі буде перегляд правил iptables:
$ sudo iptables -n -L | grep 22
За допомогою цієї команди ви можете перевірити правила, які дозволяють певний трафік на порту 22. Якщо у вас немає вхідного трафіку у виведенні, ви можете змінити це за допомогою:
$ sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
Тепер давайте пояснимо вищезгаданий рядок, щоб ви краще розуміли процес:
- 22 - ця частина визначає порт.
- -p tcp - тут ми вказуємо потрібний протокол, в даному випадку це TCP.
- -j ACCEPT - означає, що трафік, який відповідає цьому правилу, має бути прийнятий.
Наступним кроком буде встановлення iptables-persistent, це потрібно зробити для того, щоб вони зберігалися після перезавантаження:
$ sudo apt-get install iptables-persistent
Під час процесу вам буде запропоновано зберегти поточні правила.
firewalld Налаштування брандмауера
Ми скористаємося наступною командою, щоб перевірити, чи відкритий SSH-порт, це слід зробити у випадку, якщо firewalld працює у Linux:
$ sudo firewall-cmd --list-ports
Може виникнути ситуація, коли цього порту немає в списку, тому ви можете дозволити його за допомогою цього рядка:
$ sudo firewall-cmd --permanent --add-port=22/tcp
За допомогою цієї команди ви додасте порт 22 до постійної конфігурації. Після виконання цього кроку зробіть перезавантаження:
$ sudo firewall-cmd --reload
Керування хостами по SSH
Тепер давайте спробуємо розібратися з проблемами, які можуть бути пов'язані з ключами хостів. Ми можемо впоратися з цим, очистивши файл:
$ cp ~/.ssh/known_hosts ~/.ssh/known_hosts.bak && echo > ~/.ssh/known_hosts
Вивчення логів SSH
Ще один метод, який ми можемо використати для виправлення помилки - це перевірка логів SSH на наявність можливих проблем. Для перевірки останніх логів використовуйте tail і -f для перегляду нових записів:
$ tail -f /var/log/auth.log
Ви також можете спробувати /var/log/secure, якщо місце у прикладі команди не спрацювало. Це 2 типових варіанти, але у вас також є ще один варіант.
Аналіз проблем з SSH
Якщо жоден з наведених вище варіантів не спрацював у вашому випадку, ми можемо запропонувати ще один:
$ ssh -v asr@177.155.233.156
Висновок допоможе вам визначити проблеми з підключенням по SSH.
Висновок
У цій статті ми поділилися з вами деякими практичними рекомендаціями щодо усунення помилки SSH в системі Linux. Ми постаралися включити всі найпоширеніші стратегії щодо проблем з підключенням. Почніть з перевірки конфігурації SSH, потім перевірте налаштування брандмауера, і, звичайно, ви також можете скористатися аналізом проблем SSH. Дотримуючись найпростішої процедури, ви отримаєте безпечне SSH-з'єднання у вашій операційній системі (в нашому випадку Linux).