Опция клиента SSH для подавления баннеров сервера?

Вопрос или проблема

Я прочитал Остановить ssh-вход, чтобы не печатать motd из клиента?, однако моя ситуация немного другая:

  • Я хочу сохранить Banner /path/to/sometxt на стороне сервера
  • Я хотел бы передать параметр при определённых условиях, чтобы Banner не печатался (например, ssh -o "PrintBanner=No" someserver).

Есть идеи?

Вы не можете. (По крайней мере, не с обычным OpenSSH)

Баннер сервера отправляется сервером до начала аутентификации. Его цель обычно заключается в том, чтобы содержать законный отказ от ответственности или подобное сообщение типа “Если вы не авторизованы, отключитесь СЕЙЧАС”, или другие критические вещи, которые вы не хотите, чтобы удаленный пользователь мог подавить/игнорировать.

Если вы действительно хотите избавиться от этого, вам нужно будет взломать и скомпилировать свою собственную кастомизированную версию SSH-клиента.

Есть опция LogLevel:

Она подавляет баннер, но вы все же можете получать ошибки:

$ ssh -o LogLevel=error localhost 
Permission denied (publickey).

Я протестировал это, думаю, что вы можете использовать -q в команде ssh. Параметр -q означает Режим тишины. Это подавляет большинство предупреждений и диагностических сообщений, например:

ssh -t '$node2' 'sudo cat xxx' |grep xxxxx" 2>/dev/null >/root/node2

или

ssh -t -q '$node2' 'sudo cat xxxx' |grep xxx" >/root/node2

Надеюсь, это поможет другим

Обновите ~/.ssh/config следующим образом, чтобы подавить баннер

Host *
    LogLevel error

Похоже, вы ищете -q:

Режим тишины. Подавляет большинство предупреждений и диагностических сообщений.

ssh user@host
*------------------------------------------------------------------------------*
| banner: blah                                                                 |
*------------------------------------------------------------------------------*
Last login: Mon Oct  2 16:40:01 2017 from ipAddress
$

С -q

ssh -q user@host
Last login: Mon Oct  2 16:40:30 2017 from ipAddress
$

Тихо и спокойно. Баннер все еще настроен, но он вам не мешает.

Хотя: не используйте баннеры. Лучше не подтверждать и не опровергать ничего. Это не поможет вам с людьми, о которых вы не беспокоились, и люди, о которых вы беспокоитесь, будут смеяться, когда они пройдут мимо этого ;-)

Вы должны иметь возможность установить другой Banner (или вообще не устанавливать) внутри блока Match.

Например:

Match Address 192.0.2.0/24
        Banner none

Но это должно быть сделано на стороне сервера, в зависимости от определённых условий. Вы не можете сделать это со стороны клиента.

Для меня -o LogLevel=error было лучше, чем -q, потому что последнее подавляет важную информацию об ошибках (которую вы можете получить только через код выхода).

Сравните это (без опций):

[root@myserver804 myuser1]# ssh targetserver1; echo "exit code=$?"
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
SHA256:hvtR8Dl09aUeCeG2cT5EA8b+nbCOoV6h1DUON2vE63w.
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message.
Offending RSA key in /root/.ssh/known_hosts:1735
RSA host key for targetserver1 has changed and you have requested strict checking.
Host key verification failed.
exit code=255

с этим (тихо)

[root@myserver804 myuser1]# ssh -q targetserver1; echo "exit code=$?"
exit code=255

с этим (только лог ошибок)

[root@myserver804 myuser1]# ssh -o LogLevel=error targetserver1; echo "exit code=$?"
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
SHA256:hvtR8Dl09aUeCeG2cT5EA8b+nbCOoV6h1DUON2vE63w.
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message.
Offending RSA key in /root/.ssh/known_hosts:1735
RSA host key for targetserver1 has changed and you have requested strict checking.
Host key verification failed.
exit code=255

Так что вывод: если вы все еще интересуетесь актуальными ошибками, используйте -o LogLevel=error

Хорошо, добавляю свое решение. Я обнаружил, что получаю разные результаты в зависимости от того, как я использовал ssh.

ssh -q tgt true
Нет баннера

ssh -q tgt <<EOF
true
EOF
Баннер

ssh -q tgt bash <<EOF
true
EOF
Нет баннера

Ни -q, ни -oLogLevel=error не работают.

Что работает, так это подавление STDERR

ssh hostname command 2>/dev/null

Недостаток в том, что подавление STDERR применяется ко всей команде, а не только к программе SSH.

На уровне пользователя вы можете подавить баннеры сервера, создав пустой файл в домашнем каталоге пользователя (/home/username/) с именем .hushlogin.

touch ~/.hushlogin

Попробуйте:

ssh -q

мои соединения ssh не получают сообщение баннера.

Когда команда передается в качестве параметра командной строки для ssh, она выполняется как сессия без PTY, и приветственное сообщение скрыто:

ssh localhost bash

Вы можете, если захотите, также использовать это для отправки набора команд:

echo "ls" | ssh localhost         # Приветственное сообщение и вывод ls
echo "ls" | ssh localhost bash    # Только вывод ls

Просто вызовите оболочку, это должно подавить баннер.

ssh [email protected] /bin/bash

Учтите, что для меня, по крайней мере, моя переменная $PS1 не устанавливается, поэтому кажется, что она зависает. Мне пришлось ввести несколько команд, чтобы убедиться, что это работает.

Для меня -q сработало, и я все еще мог работать с выводом, сохраненным в файл.

ssh -q root@server28 “ls -alF /dr_mksysb |egrep -v \”total|lost+found|./|../\” |awk ‘{print \$NF}’ |sed ‘s/.\$//g'” > ${basedir}/28.list

.

Ответ или решение

Подавление информационных баннеров сервера в SSH: Возможности и Ограничения

SSH (Secure Shell) стал стандартным инструментом для безопасного удаленного доступа к серверам. Однако многие администраторы и пользователи сталкиваются с проблемой появления уведомлений о баннерах, показанных во время подключения. Это может быть нежелательным, когда необходимо сократить вывод информации или обеспечить более чистый интерфейс. В данной статье мы рассмотрим, как можно подавить вывод баннеров сервера при подключении через SSH.

Основные ограничения

Прежде всего, важно понимать, что в стандартной реализации OpenSSH контролировать вывод баннеров клиента невозможно. Баннеры отправляются сервером до аутентификации и предназначены для информирования пользователей о юридических условиях, безопасности и других критически важных сообщениях. Это означает, что на уровне клиента невозможно подавить вывод баннера, не нарушая целостность функций, заложенных в SSH.

Использование параметров клиента

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

  1. Параметр -q (Quiet Mode):
    Использование этого параметра позволяет подавлять большинство предупреждающих и диагностических сообщений. Например, вы можете выполнить следующую команду:

    ssh -q user@hostname

    Это поможет убрать лишний вывод, однако важно помнить, что вывод по умолчанию радиокнопки будет скрыт, поэтому в случае возникновения ошибок вы не получите подробной информации о проблеме.

  2. Параметр -o LogLevel=error:
    Этот параметр позволяет получить сообщения только об ошибках, что в некоторых случаях может быть полезно для диагностики, не отвлекаясь на менее важные уведомления.

    ssh -o LogLevel=error user@hostname
  3. .hushlogin файл:
    Создание пустого файла .hushlogin в пользовательской директории (~/.hushlogin) также может помочь скрывать баннеры при входе.

    touch ~/.hushlogin

Альтернативные подходы

  1. Проверка на уровне команд:
    Если вы выполняете удаленные команды через SSH, следует использовать команду без выделения PTY (pseudo-terminal). Например:

    ssh user@hostname command

    Это исключает вывод баннера, так как SSH работает в контексте однострочной команды.

  2. Потоковое перенаправление стандартного вывода ошибок (STDERR):
    Вы можете перенаправить вывод ошибок в /dev/null:

    ssh user@hostname command 2>/dev/null

    Тем не менее, это также удалит другие полезные сообщения об ошибках, о которых стоит помнить.

Заключение

Подавление баннеров на стороне клиента в SSH является сложной задачей из-за архитектурных решений, заложенных в OpenSSH. На текущий момент единственным действующим способом является использование комбинации представленных выше методов, таких как -q, -o LogLevel=error, создание .hushlogin файла и выполнение команд без выделения терминала.

В то же время, важно помнить, что баннеры могут выполнять важные функции защиты и информирования, и их полное подавление может привести к упущению важных уведомлений. Поэтому решение об отключении баннеров должно приниматься с учетом требований безопасности и необходимой информации для пользователей.

Оцените материал
Добавить комментарий

Капча загружается...