Вопрос или проблема
Я прочитал Остановить 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.
Использование параметров клиента
Несмотря на вышеупомянутые ограничения, существуют некоторые параметры, позволяющие минимизировать вывод сообщений:
-
Параметр -q (Quiet Mode):
Использование этого параметра позволяет подавлять большинство предупреждающих и диагностических сообщений. Например, вы можете выполнить следующую команду:ssh -q user@hostname
Это поможет убрать лишний вывод, однако важно помнить, что вывод по умолчанию радиокнопки будет скрыт, поэтому в случае возникновения ошибок вы не получите подробной информации о проблеме.
-
Параметр -o LogLevel=error:
Этот параметр позволяет получить сообщения только об ошибках, что в некоторых случаях может быть полезно для диагностики, не отвлекаясь на менее важные уведомления.ssh -o LogLevel=error user@hostname
-
.hushlogin файл:
Создание пустого файла.hushlogin
в пользовательской директории (~/.hushlogin
) также может помочь скрывать баннеры при входе.touch ~/.hushlogin
Альтернативные подходы
-
Проверка на уровне команд:
Если вы выполняете удаленные команды через SSH, следует использовать команду без выделения PTY (pseudo-terminal). Например:ssh user@hostname command
Это исключает вывод баннера, так как SSH работает в контексте однострочной команды.
-
Потоковое перенаправление стандартного вывода ошибок (STDERR):
Вы можете перенаправить вывод ошибок в/dev/null
:ssh user@hostname command 2>/dev/null
Тем не менее, это также удалит другие полезные сообщения об ошибках, о которых стоит помнить.
Заключение
Подавление баннеров на стороне клиента в SSH является сложной задачей из-за архитектурных решений, заложенных в OpenSSH. На текущий момент единственным действующим способом является использование комбинации представленных выше методов, таких как -q
, -o LogLevel=error
, создание .hushlogin
файла и выполнение команд без выделения терминала.
В то же время, важно помнить, что баннеры могут выполнять важные функции защиты и информирования, и их полное подавление может привести к упущению важных уведомлений. Поэтому решение об отключении баннеров должно приниматься с учетом требований безопасности и необходимой информации для пользователей.