У меня настроен SSH без пароля, однако он печатает MoTD при входе в систему. Есть ли способ остановить это на стороне клиента?
Я пытался, ssh -q
но это не работает. Я не хочу использовать ~/.hushlogin
и не хочу менять настройки сервера. Единственное, что может работать - это успокоить весь вывод, с >/dev/null 2>&1
. Однако я не хочу игнорировать ошибки в случае, если на самом деле есть проблема. Даже выполнение >/dev/null
не работает, так как, ssh
кажется, печатать MOTD для STDERR.
Обновление и рассуждения Я запускаю резервное копирование в cron. Я не хочу получать электронную почту cron, если не произошла ошибка. Однако, если MOTD напечатан, я буду получать электронную почту все время.
Я хочу сохранить печать MOTD, потому что это имеет юридические последствия. Мотд говорит "неавторизованный доступ запрещен". Вы должны иметь такого рода заявление, чтобы юридически запретить людям доступ к нему (например, знак «не входить»). Следовательно, я не хочу все время отключать его.
/etc/profile.d
любых сценариев, которые могут там выполняться, и выводить некоторые данные на консоль при входе в систему.Ответы:
Я не уверен, почему у вас есть отвращение к тому, чтобы делать это правильно - либо на сервере а-ля
а также
Или добавив ~ / .hushlogin для каждого пользователя.
Подсказка, для ~ / .hushlogin добавьте его в / etc / skel, чтобы новые домашние каталоги пользователей создавались вместе с файлом.
Обновить:
Без дополнительной информации о резервном задании cron я могу предложить только одно: перенаправить вывод команды в файл (или позволить cron перехватить его в электронной почте) и вывод сеанса ssh в / dev / null. Что-то типа:
Или
Мне нужно немного поиграться с командами, но это должно помочь вам начать.
источник
.hushlogin
это хорошоЕсли вы хотите это для каждого пользователя, просто сделайте a,
touch ~/.hushlogin
и все готово с OpenSSH.Обновление : как указано в другом месте,
pam_motd
может быть настроено, чтобы не использовать для пользователя.hushlogin
; проверить/etc/login.defs
дляHUSHLOGIN_FILE
. Он может быть настроен на включение всех пользователей в список/etc/hushlogins
или аналогичный.источник
@note Все примеры предполагают, что вы установили переменную
connectionString
с чем-то вродеconnectionString=user@server
.Как я дошел до решения
Использование
ssh -T
должно работать для простых команд. Например, это не выводит дополнительную информацию:Проблема в том, что вы пытаетесь использовать здесь-документ для запуска многих команд. Например - ниже не будет работать - он будет отображать сообщение дня (MoTD), а также может показать вам "stdin: не является tty".
Чтобы обойти проблему, необходимо сначала сохранить команды в локальной переменной и отправить их на удаленный сервер.
Но это грязно ...
Окончательное решение
Сделайте универсальную функцию (обратите внимание, что она может принимать строку или HEREDOC в качестве команд).
Примеры
Используйте это так:
Или вот так:
Или вот так:
Или даже так:
источник
Как насчет этого взломать? ;-П
Следующее является не действительным:
Переход
-T
к ssh для отключения tty:источник
-t
Что это за операционная система? В некоторых системах (например, в Ubuntu) motd печатается не сервером ssh (PrintMotd в / etc / ssh / sshd_config), а pam с помощью pam_motd. Если это так, то вы, вероятно, не можете контролировать это с клиента.
источник
Вы должны сделать это на сервере:
В debian / ubtuntu также хэшируйте строку с pam_motd.so:
источник
Не выполняйте команду ssh напрямую cron.
Вместо этого создайте вспомогательный скрипт bash , выполняя задание ssh и извлекая выходные данные, ошибки и код ошибки, если это необходимо; в конечном итоге проанализируйте их, чтобы удалить ненужные строки из сообщений об ошибках (MoTD в вашем случае), а затем повторно распечатайте выходные данные скрипта bash и потоки ошибок, которые вы получили таким образом.
Чем поставить этот скрипт в Cron и жить счастливым :)
Примечание. Это общее решение, и оно должно работать независимо от того, какую работу вы должны выполнять через ssh. Только клиентская сторона должна отвечать вашим потребностям ... единственная зависимость клиента от конфигурации сервера - это знание точного сообщения, которое вы хотите вырезать из std err или из ssh клиента
источник
Просто sidenote (был бы комментарий, если бы я мог опубликовать это): Содержимое motd отображается после успешного входа в систему. Если бы я хотел юридически запретить людям доступ к ящику, я бы предпочел сделать это с помощью «Banner» в sshd_config. Содержимое отображается после ввода имени пользователя, но до аутентификации.
источник
Либо вы не пробовали то, что описывали, либо ваши серверы настроены неправильно!
Вот что я только что попробовал на RHEL5:
Я не думаю, что вам нужно, чтобы заявление об отказе было отправлено в неинтерактивные оболочки, не так ли? (Если кто-то заявляет, что вы это делаете, сделайте мне одолжение, пните их до безумия.) Потому что именно поэтому существует различие между интерактивными оболочками и неинтерактивными.
Но в любом случае вот что я делаю, потому что мне не нравится почта от cron: я передаю вывод в logger. Просто передайте его через tail, чтобы удалить первые несколько (скажем, 3) строк вашего бессмысленного отказа от ответственности как такового (непроверенный код, у меня нет доступа к моим сценариям):
источник
Если я вас понимаю, вам нужен motd по другим причинам, но не нужен motd для резервного копирования. В конфиге sshd нельзя настроить его только на глобальном уровне. Поэтому вам необходимо решить проблему подавления MOTD на стороне клиента. Но нет разницы между текстом MOTD и сообщениями об ошибках программного обеспечения для резервного копирования. Оба текста в терминале. Единственное решение, которое я вижу, чтобы сделать различие между этими двумя сообщениями, а затем отфильтровать сообщение motd Поскольку сообщения программного обеспечения трудно изменить, я предлагаю изменить текст MOTD. Например, поместите рамку вокруг:
Затем вы должны отфильтровать текст между рамкой и опустить его.
источник
РЕШЕНИЕ ЗДЕСЬ:
Если вы не отвечаете за сервер и не можете изменить конфигурацию motd или sshd, используйте следующую команду:
Перенаправьте STDERR в STDOUT для удаленной команды, чтобы вы ее увидели. А затем перенаправить STDERR из ssh в / dev / null. MOTD переходит в STERR и заканчивается в / dev / null. Любое стандартное сообщение об ошибке И от удаленной команды будет показано (как оно идет к STDOUT)
Вариант 1 - если вам небезразлично состояние завершения удаленно выполняемой команды:
ssh remotehost "(remote_command1 && remote_command2; remote_command3) 2>&1" 2>/dev/null || echo SSH connection or remote command failed - either of them returned non-zero exit code $?
Вариант 2 - если вы хотите игнорировать код выхода удаленной команды - просто выполните true в качестве последней удаленной команды
ssh remotehost "(remote_command; true) 2>&1" 2>/dev/null || echo SSH connection failed
Примеры сообщений об ошибках:
Пример 1:
Пример 2:
Пример 3а:
Пример 3б:
источник
Вы пытались удалить текст в файле MOTD? Просто мысль.
источник
Что вы пытаетесь сделать и почему МТД беспокоит вас? Я предполагаю выполнение удаленной команды и анализ выходных данных? Если это так, это можно сделать разными способами, не вызывая интерактивную оболочку (что приводит к отображению motd).
источник
Вы пробовали использовать конфигурацию подсистемы ssh? Вы можете найти пример на http://www.hell.org.ua/Docs/oreilly/tcpip2/ssh/ch05_07.htm, который даже включает резервное копирование файлов.
источник