Ошибка sshd из-за недоступности сети

Многие инструменты могут быть статически скомпилированы (я точно знаю это с помощью netcat ) внутри Buildroot ( http://buildroot.uclibc.org/ ), а затем загружены с помощью wget на устройство. Вот что я сделал в похожей ситуации.

Просто установите правильные параметры, вы можете получить к ним доступ с помощью make menuconfig . Следующие страницы параметров, вероятно, будут для вас наиболее важными (я отметил часто важные параметры с помощью !> ):

  • Target
  │ ┌────────────────────────────────────────────────────────────────────────────┐ │  
!>│ │        Target Architecture (FOOBAR)  --->                                  │ │  
  │ │        Target Binary Format (ELF)  --->                                    │ │  
!>│ │        Target Architecture Variant (Gen42)  --->                           │ │  
  │ │        Target ABI (EABI)  --->                                             │ │  
  │ │        Floating point strategy (Soft float)  --->                          │ │  
  │ │                                                                            │ │  
  • Параметры сборки
!>│ │        libraries (static only)  --->                                       │ │  
  │ │    ($(CONFIG_DIR)/local.mk) location of a package override file            │ │  
  │ │    ()  global patch directories                                            │ │  
  │ │        Advanced  --->                                                      │ │  
  │ └────────────────────────────────────────────────────────────────────────────┘ 
  • Toolchain
  │ ┌────────────────────────────────────────────────────────────────────────────┐ │  
  │ │        Toolchain type (Buildroot toolchain)  --->                          │ │  
  │ │    (buildroot) custom toolchain vendor name                                │ │  
  │ │        *** Kernel Header Options ***                                       │ │  
!>│ │        Kernel Headers (Manually specified Linux version)  --->             │ │  
!>│ │    (2.6.99) linux version                                                  │ │  
!>│ │        Custom kernel headers series (2.6.x)  --->                          │ │  
  │ │        C library (uClibc)  --->                                            │ │  
  │ │        *** uClibc Options ***                                              │ │  
!>│ │        uClibc C library Version (uClibc 0.9.33.x)  --->                    │ │  

Затем выполните сборку цепочку инструментов, используя make toolchain , а затем какой инструмент вам нужен, например сделать nc .

2
07.05.2018, 00:34
3 ответа

Как указал А.Б., ваша конфигурация ssh, вероятно, настроена для прослушивания определенного IP-адреса. Если этот IP-адрес недоступен при запуске sshd, служба не будет работать.
По умолчанию sshd настроен на перечисление 0.0.0.0, что означает любой адрес, и, таким образом, не зависит от наличия конкретного IP-адреса.

Есть два способа решить эту проблему:

Запуск послеnetwork-online.target

systemd предоставляет модуль network-online.targetдля сервисов, которым требуется полная работа сети (для всех настроенных интерфейсов ). Таким образом, вы можете запустить sshd после того, как этот модуль запустится после настройки интерфейса

.
mkdir /etc/systemd/system/sshd.service.d

cat > /etc/systemd/system/sshd.service.d/network-online.conf <<EOF
[Unit]
After=network-online.target
EOF

systemctl daemon-reload

Разрешить привязку к не -локальным адресам

Другой вариант — разрешить прослушивание адресов, отсутствующих на хосте.
Это решение является общесистемным, поэтому оно применимо к любой службе, а не только к sshd.

echo 'net.ipv4.ip_nonlocal_bind = 1' > /etc/sysctl.d/99-nonlocal_bind.conf

systemctl restart systemd-sysctl.service
8
27.01.2020, 21:52

У меня была такая же проблема, и я несколько раз натыкался на этот вопрос при поиске в сети.

Обходной путь заключается в привязке sshdк двум адресам. Адрес нужного интерфейса, например192.168.0.23и адрес петли 127.0.0.1.

ListenAddress 127.0.0.1
ListenAddress 192.168.0.23

Однако это не мешает ssh вызывать ошибку. Но вместо сбоя ssh через секунду перезагружается и потом привязывается к правильному адресу. Вот пример разницы.

  • Только с 192.168.0.23
sshd[378]: error: Bind to port 22 on 192.168.0.23 failed: Cannot assign requested address.
sshd[378]: fatal: Cannot bind any address.
systemd[1]: ssh.service: Main process exited, code=exited, status=255/n/a
systemd[1]: ssh.service: Unit entered failed state.
  • С 192.168.0.23и127.0.0.1
sshd[390]: error: Bind to port 22 on 192.168.0.23 failed: Cannot assign requested address.
sshd[390]: Server listening on 127.0.0.1 port 22.
sshd[390]: Received SIGHUP; restarting.
sshd[390]: Server listening on 192.168.0.23 port 22.
sshd[390]: Server listening on 127.0.0.1 port 22.
0
27.01.2020, 21:52

Основываясь на ответе @phemmer, у меня возникла та же проблема, и я исправил ее, добавив

 [Unit]
 Wants=network-online.target
 After=network-online.target

в файле конфигурации /etc/systemd/system/sshd.service.d.

Также убедитесь, что для вашего сетевого менеджера включена правильная служба ожидания, как описано здесь . Например:

 $ systemctl is-enabled NetworkManager-wait-online.service systemd-networkd-wait-online.service
1
01.01.2021, 21:09

Теги

Похожие вопросы