SSH скидає порт за замовчуванням при перезавантаженні


12

Я змінив свій стандартний порт SSH на своєму домашньому сервері (у /etc/ssh/sshd_configфайлі) на порт 54747, потім перезапустив sshі sshdслужби (ніколи не впевнений, який з них я зробив як для того, щоб бути в безпеці). Щоб перевірити свою конфігурацію, я вийшов із системи та повернувся без проблем.

Через пару днів я встановив доречні оновлення, а потім перезавантажив свій сервер. Коли я спробував повернути SSH (на порт 54747), я отримав помилку підключення.

Чомусь я спробував SSH на порту за замовчуванням, і це спрацювало! Я повернувся, щоб перевірити sshd_config, але він все ще мав користувацький порт. Тому я перезапустив sshі sshdсервіси, і він повернувся до "регулярної" поведінки (ssh на порт 54747). Я спробував перезавантажити знову, і з’єднання знову відмовилося ...

Хтось знає, що я зробив не так?

Додаткові дані:

  • Ubuntu 16.04.2 LTS
  • Сервер також використовує HTPC з відкритим сеансом (такий же користувач, як SSH) на моєму телевізорі
  • Я SSH використовую ключ RSA мого ноутбука та відключив автентифікацію пароля
  • Раніше я перезавантажувався sudo reboot -h now, але після пошуку я виявив, що деякі люди його відштовхують, тому я спробував sudo reboot, але відмінностей немає

EDIT Послідовність подій:

  1. Змініть порт SSH з 22 на 54747 дюйма /etc/ssh/sshd_config
  2. Перезавантажте служби ssh та sshd
  3. Закінчити поточний сеанс SSH
  4. SSH успішно повернувся на порт 54747
  5. Перезавантажте
  6. Помилка підключення SSH на порт 54747, але успішна на порту 22
  7. Перезавантажте служби ssh та sshd
  8. SSH успішно повернувся на порт 54747, помилка підключення на порт 22
  9. Перезавантажте та поверніться до 6

EDIT 1: netstat вихід

rgo@ATLAS:~$ sudo netstat -lntp | grep :54747
rgo@ATLAS:~$ sudo netstat -lntp | grep :22
tcp6       0      0 :::22                   :::*                    LISTEN      1/init  

EDIT 2: service sshd status

● ssh.service - OpenBSD Secure Shell server
   Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
   Active: inactive (dead)

EDIT 3: lsof -i | grep ssh

systemd      1     root   46u  IPv6  42724      0t0  TCP ATLAS:ssh->192.168.1.27:49837 (ESTABLISHED)
systemd      1     root   49u  IPv6  14641      0t0  TCP *:ssh (LISTEN)
sshd      4088     root    3u  IPv6  42724      0t0  TCP ATLAS:ssh->192.168.1.27:49837 (ESTABLISHED)
sshd      4088     root    4u  IPv6  42724      0t0  TCP ATLAS:ssh->192.168.1.27:49837 (ESTABLISHED)
sshd      4202      rgo    3u  IPv6  42724      0t0  TCP ATLAS:ssh->192.168.1.27:49837 (ESTABLISHED)
sshd      4202      rgo    4u  IPv6  42724      0t0  TCP ATLAS:ssh->192.168.1.27:49837 (ESTABLISHED)

Для довідки, ATLAS - це ім'я хоста віддаленого сервера, 192.168.1.27 - це локальна IP-адреса мого ноутбука, і команда виконувалася між кроками 6 та 7

ufw status

Status: inactive

EDIT 4: ps -ef |grep sshd

root      4088     1  0 22:40 ?        00:00:00 sshd: rgo [priv]
rgo       4202  4088  0 22:40 ?        00:00:00 sshd: rgo@pts/1 sshd

Я ні в якому разі не зневажаю вас. Але мені здається, ви не вводите команди на ssh-сервер так, як вимагали. Ви не можете мати прямі з'єднання ssh, коли демон ssh мертвий ....... на ssh сервері, ps -ef | grep sshd повинен повернути / usr / sbin / sshd -D процес. Є кілька людей, які допомагають, але надсилають вас у різних напрямках. Я радий поспілкуватися з вами в чаті, якщо це було б вам корисно.
jones0610

Можливо, це тому, що у мене вже відкрито сеанс із тим самим користувачем, який відображається на телевізорі разом із Kodi?
3рго

Привіт, @ 3rgo, вам вдалося це вирішити?
pa4080

Привіт ! Ні, я все ще відчуваю це питання ... На щастя, мені не доведеться так часто перезавантажувати домашній сервер, але все одно це біль, тому що він порушує деякі мої автоматизовані процеси ...
3рго

У мене є кілька ідей. (1) Ви можете спробувати змінити порт на його значення за замовчуванням, а потім перезавантажте всю систему. Потім спробуйте змінити його знову на потрібне значення. (2) Спробуйте, наприклад, з різним значенням Port 10285. Google показує пару результатів для 54747 ... (3) Також SSH-сервер може працювати з декількома портами одночасно. Створіть дві окремі директиви для кожного порту: Port 22і Port 54747, а потім відкрийте лише другий в брандмауер. (4) Ви можете спробувати Match LocalPortдирективу , розміщену на початку sshd_c.
pa4080

Відповіді:


2

ssh може бути "активовано сокет" системою в залежності від конфігурації, це означає, що спочатку це система, яка встановлює порт прослуховування, а sshd запускається лише тоді, коли клієнт вперше підключиться. Це для прискорення часу запуску: демон-сервіси запускаються лише на вимогу.

Однак це означає, що ви також повинні налаштувати systemd на відповідний порт. Ви знайдете конфігурацію системи, в /lib/systemd/system/ssh.socketякій перераховані ListenStream=22. Щоб змінити це, створіть файл /etc/systemd/system/ssh.socket.d/port.conf(за ssh.socket.dнеобхідності створивши каталог ), який містить:

[Socket]
ListenStream=
ListenStream=54747

Змініть номер на потрібний порт. Перший пустий запис стирає попередній за замовчуванням, а наступний запис додає новий. Це переосмислює замовчування, що постачається, /lib/systemd/system/ssh.socketі його необхідно робити на додаток до змін /etc/ssh/sshd_config.

Потім запустіть, sudo systemctl daemon-reloadщоб повідомити systemd про свої зміни, і sudo systemctl reload sshякщо ваш ssh демон раніше працював.


Ця відповідь виглядає дуже перспективною, але /etc/systemd/system/ssh.socket.d/port.confїї ігнорують і перезавантаження все одно скидає порт на 22. Чи відповідає ім'я файлу ? Не вдалося знайти гарну документацію щодо системних перекриттів на Ubuntu .
MestreLion

Назва файлу не має значення, доки він закінчується .conf. Детальнішу інформацію про файли конфігурації системного перегляду перегляньте в systemd-system.conf (5) .
Робі Басак

Також ви можете запустити, systemctl status ssh.socketщоб побачити, чи він увімкнено і що він слухає.
Робі Басак

2
Це працює !!! Врешті ця містерія вирішена! Але згодом я помітив, що мені вдалося отримати доступ за допомогою обох портів: типового 22 та спеціального. Додавання ListenStream=рядка до користувацького порту запобігло це, не знаю чому. Можливо, це "очищає" ListenStream=22налаштування за замовчуванням /lib/systemd/system/ssh.socket? Дивний спосіб змінити налаштування. Може, варто додати це до відповіді?
MestreLion

@MestreLion ах, так, це правильно. Я оновлю відповідь. Дякую!
Робі Басак

0

Перевірте настройки /etc/ssh/sshd_configфайлу у файлі. Переконайтеся, що ви редагуєте як sudo або користувач у групі sudo. Все, що вам потрібно зробити, щоб встановити порт, - це на одному рядку типу Port 54747.Перезапустити службу ssh, запустивши. service sshd restart.Потім переконайтесь, що ssh прослуховує цей порт, запустивши sudo netstat -lntp | grep ssh.Перезавантажити та перевірити.

Також перевірте свої мережеві настройки. Якщо ви перебуваєте у корпоративної мережі, переконайтеся, що ви знаходитесь у правильній версії.


Я зробив резервну копію і відредагував файл як sudo, і змінив Port 22рядок за замовчуванням на Port 54747лише. Крім того, netstat, який ви мені дали, не мав результатів. Я додав модифіковану в моїй ОП
3рго

Ви правильно підключаєтесь до ключа? Таким чином , ви повинні бути з'єднання , як: ssh -i key.txt user@ipaddress -p 54747. Також перевірте, чи ще щось слухає на цьому порту. Зробіть sudo lsof -i | grep ssh. Ви також можете перевірити брандмауер, щоб переконатися, що він нічого не блокує. Є: sudo ufw status.
G_Style

Жоден порт не використовується на 54747 (див. Мій ОП, я додав його). До нього я додаю також результати ваших команд
3рго

Коли я ще трохи подумав про вашу проблему, у мене виникає відчуття, що це не ваша установка, а те, як ви перезавантажуєтесь, що викликає цю проблему. Під час перезавантаження слід скористатися командою shutdown -r now. Спробуйте, і повідомте про результати. Перегляньте цю статтю для довідок: askubuntu.com/questions/483670/…
G_Style

Я просто спробував і отримав такий же результат, як sudo reboot -h nowабо `sudo reboot``
3рго

0

Іноді справи просто йдуть не так. Якби я був на вашому місці, я б спробував:

cp /etc/ssh/sshd_config $HOME
sudo apt-get --reinstall install openssh-server

Чи вимагатиме від мене фізичний доступ до сервера? Якщо так, я можу це зробити лише завтра ввечері
3рго

Привіт @ 3rgo, я думаю, вам фізичний доступ не потрібен. Я просто спробую це на моєму VPS. Також на мій домашній сервер Ubuntu, поки я входив через SSH. Навіть зв’язок не був перерваний. cpкоманда про всяк випадок, зазвичай процес перевстановлення не торкається файлів конфігурації.
pa4080

Привіт! Я спробував перевстановити, але нічого не змінилося, у мене все ще така ж проблема ...
3рго

0

ssh - це клієнтський процес, який арбітражує та підтримує з'єднання сеансу користувача до ssh-сервера. sshd - демон, який працює на ssh сервері для прослуховування та автентифікації запитів на з'єднання ssh.

Файл конфігурації на сервері sshd, який читається під час запуску служби sshd (для редагування якого потрібні права доступу sudo), є

/etc/ssh/sshd_config

Послуга повинна починатися з

/etc/systemd/system/sshd.service

Щоб перезапустити sshd, що передбачало б перечитати файл sshd_config

sudo service sshd restart

Щоб побачити, який порт слухає sshd-демон, а також іншу корисну інформацію про тип сервера ssh

sudo service sshd status

Виконайте ці дії у вказаному порядку:

Перезавантажте ssh-сервер

Відкрийте термінальний сеанс на ssh-сервері (не ssh-з'єднання з ним)

Тип hostname

Якщо ім'я хоста не повертає ім'я ssh-сервера (Atlas у цьому випадку), повторіть попередній крок правильно.

grep Port /etc/ssh/sshd_config - відзначте номер порту. Повинен бути той, який ви вказали

sudo service sshd status

Якщо статус повідомляє, що він активний, працює і прослуховується на визначеному вами користувальницькому порту, тоді ви добре в цьому. Якщо ні, запуск служби може не викликати змінений файл sshd_config, а інший файл конфігурації, що містить інформацію за замовчуванням. Якщо сервіс не запустився (говорить про мертве, а не активний і працює, то це вже інша проблема, ніж те, про що ви запитали.

Ці кроки, ймовірно, виявлять першопричину проблеми, про яку ви питаєте.

З метою тестування та простоти: На стороні клієнта з термінального сеансу ви переходитимете до ssh-сервера наступним чином.

ssh -l username -p 54747 hostname

На основі зворотного зв'язку з ОП, я підозрюю, що sshd не запускається під час завантаження, але запускається правильно, коли викликається вручну. Успішне з'єднання ssh через порт 22 цілком може НЕ підключатися до ssh-сервера, а до чогось іншого (наприклад, localhost). Щоб підтвердити або розблокувати це, після підключення через тип ssh

hostname

Виходячи з того, що говорить ОП, я гадаю, що ім'я хоста не буде атласом ssh-сервера.

Щоб додатково ізолювати це після перезавантаження ssh-сервера, але перед тим, як робити що-небудь далі , з термінального сеансу на ssh-сервері (Atlas) типу

ssh localhost

Якщо це не вдасться, як слід, тоді

ssh -p 54747 localhost

Якщо це не працює, це підтвердить результати, отримані під час запуску

sudo service sshd status

Привіт ! Я додав послідовність подій, щоб ви могли краще зрозуміти. Я SSH використовую команду ssh -p <PORT> <USER>@<IP>, з моїм приватним ключем додається агент.
3рго

Дуже добре. Зробіть крок 6а: на сервері sshd - статус sshd служби sudo. Якщо він повідомляє порт 22, то там викликається помилковий файл sshd_config.
jones0610

Каже, "неактивний (мертвий)" (див. Повний вихід у моїй ОП за секунду)
3рго

Тож, якщо він мертвий (неактивний і працює), ви не вступаєте в машину, яку ви думаєте. На сервері sshd введіть ps -ef | grep sshd. Якщо демон sshd на сервері sshd насправді мертвий, жодні процеси sshd не запускаються, і, таким чином, ви виграєте; не зможете ввійти в нього ssh незалежно від використовуваного порту.
jones0610

Знайдено 2 sshd-процеси ... Я додав детальний вихід
3рго

0

Можливо, ви щойно відповіли "Y", коли apt виявив відмінності між вашим sshd_config і пакетом. Він запитує, чи хочете ви встановити версію пакета mantainer або зберегти свою.


1
Я не пам’ятаю, щоб мене просили такі речі, але припускаючи, що це так, що я можу зробити, щоб це виправити?
3рго

0

Можливі причини, про які я можу придумати

  1. Інший sshd бінарний файл запускається під час завантаження або sshd запускається з іншого конфігурації. Можливо, винуватцем тут є systemd - він має інший спосіб змінити порт через файл, /usr/lib/systemd/system/sshd.socketмабуть: https://www.vultr.com/docs/how-to-change-ssh-port-on-coreos
  2. Правильний / etc / або / etc / ssh ще не встановлений під час запуску sshd, це окремий том на вашій машині, який встановлюється пізніше в процесі завантаження?
  3. sshd не має дозволу на читання для конфігураційного файлу під час завантаження, хоча я не знаю, чи взагалі запустився sshd.

2
Я вважаю, що ти на це. І якщо це сервер , який пройшов через багато оновлень, може бути , є коктейль із сценаріїв запуску прокладка навколо (SysV-Init, вискочка, Systemd) Може бути , простий пошук і перевірити всі файли в / і т.д. / , find /etc/ -iname "*ssh*"щоб шукати більше підказок.
Базз
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.