Разница между maxstartups и maxsessions в sshd_config
Я хочу ограничить общее количество соединений ssh. Я прошел много sshd руководств. Они просто говорят, что эти два поля могут использоваться MaxStartups: максимальное количество одновременных неаутентифицированных подключений к демону SSH. MaxSession: максимальное количество (мультиплексированных) открытых сеансов, разрешенных для одного соединения TCP. Каков вклад обоих в вычисление общего количества соединений ssh?
1 ответ
Вопрос довольно старый и, возможно, лучше подходит для serverfault, но он так и не получил ответа, кроме ссылки на страницу руководства. Мой ответ - дополнить детали справочной страницы добавлением контекста.
SSH позволяет мультиплексировать сеансы, то есть открывать множество сеансов (например, оболочку, передачу sftp и необработанную команду) одновременно, используя только одно TCP-соединение. Это экономит накладные расходы, связанные с многократным подтверждением связи TCP и несколькими аутентификациями SSH. ПараметрMaxSessions
позволяет ограничить это мультиплексирование определенным количеством сеансов.
Если вы установитеMaxSessions 1
и если оболочка открыта, вы все равно можете запустить передачу SFTP или открыть вторую оболочку, но в фоновом режиме SSH откроет другое TCP-соединение и снова аутентифицируется. (Используйте аутентификацию по паролю, чтобы сделать это видимым).
Если вы установитеMaxSessions 0
вы можете убедиться, что никто не может открыть сеанс (оболочка, SFTP или аналогичный), но вы все равно можете подключиться, чтобы открыть туннель или ssh на следующий хост.
Ознакомьтесь с разделом ControlMasterssh_config(5)
.
Когда вы подключаетесь к удаленному SSH-серверу, между установкой подключения и успешной аутентификацией есть промежуток времени. Этот временной интервал может быть очень маленьким, например, когда вы настраиваете свой SSH-клиент для использования определенного закрытого ключа для этого соединения, или он может быть длинным, когда клиент сначала пробует три разных SSH-ключа, просит вас ввести пароль, а затем ждет чтобы вы могли ввести 2-й факторный код авторизации, который вы получите в текстовом сообщении. Сумма одновременных подключений в этот период времени представляет собой "одновременные неаутентифицированные подключения", упомянутые на указанной странице руководства. Если в этом состоянии слишком много подключений, sshd перестает принимать новые. Вы можете настроитьMaxStartups
измениться, когда это произойдет.
Примером реального использования для изменения значения по умолчанию является, например, узел перехода, который используется для подготовки программного обеспечения, такого как ansible. Когда его просят подготовить множество хостов за хостом перехода, Ansible открывает множество соединений одновременно, поэтому он может выйти за этот предел, если соединения открываются быстрее, чем хост SSH может их аутентифицировать.
MaxSessions
Specifies the maximum number of open shell, login or subsystem
(e.g. sftp) sessions permitted per network connection. Multiple
sessions may be established by clients that support connection
multiplexing. Setting MaxSessions to 1 will effectively disable
session multiplexing, whereas setting it to 0 will prevent all
shell, login and subsystem sessions while still permitting for-
warding. The default is 10.
MaxStartups
Specifies the maximum number of **concurrent unauthenticated con-
nections to the SSH daemon.** Additional connections will be
dropped until authentication succeeds or the LoginGraceTime
expires for a connection. The default is 10:30:100.
Alternatively, random early drop can be enabled by specifying the
three colon separated values ``start:rate:full'' (e.g.
"10:30:60"). sshd(8) will refuse connection attempts with a
probability of ``rate/100'' (30%) if there are currently
``start'' (10) unauthenticated connections. The probability
increases linearly and all connection attempts are refused if the
number of unauthenticated connections reaches ``full'' (60).