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

Я прочитал Остановить логин SSH от печати MOTD с клиента? Однако моя ситуация немного отличается:

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

Любая идея?

13 ответов

Решение

Ты не можешь (По крайней мере, не со стоковой OpenSSH)

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

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

E сть 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

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

      touch ~/.hushlogin

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

      ssh -q tgt true
No Banner

ssh -q tgt <<EOF
true
EOF
Banner

ssh -q tgt bash <<EOF
true
EOF
No Banner

Ни -q или -oLogLevel=error работает.

Что работает, чтобы подавить STDERR

ssh hostname command 2>/dev/null

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

Пытаться:

      ssh -q

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

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

ssh you@someplace.com /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

Другие вопросы по тегам