Mam skonfigurowane SSH bez hasła, jednak drukuje ono MoTD po zalogowaniu. Czy jest jakiś sposób, aby zatrzymać to po stronie klienta?
Próbowałem, ssh -q
ale to nie działa. Nie chcę używać ~/.hushlogin
ani nie chcę zmieniać konfiguracji serwera. Jedyne, co może zadziałać, to wyciszenie wszystkich danych wyjściowych za pomocą >/dev/null 2>&1
. Nie chcę jednak ignorować błędów w przypadku, gdy rzeczywiście występuje problem. Nawet robienie >/dev/null
nie działa, ponieważ ssh
wydaje się, że drukuje motd na stderr.
Aktualizacja i uzasadnienie Korzystam z kopii zapasowej w cronie. Nie chcę otrzymywać wiadomości e-mail z cronem, chyba że wystąpił błąd. Jeśli jednak motd zostanie wydrukowany, cały czas otrzymam wiadomość e-mail.
Chcę nadal drukować motd, ponieważ ma to konsekwencje prawne. Motd mówi „zabroniony jest dostęp bez uzasadnienia”. Musisz mieć tego rodzaju oświadczenie, aby prawnie uniemożliwić dostęp do niego (jak znak zakazu wstępu). Dlatego nie chcę cały czas go wyłączać.
/etc/profile.d
na ewentualne skrypty, które mogą tam działać i wydrukować dane wyjściowe do konsoli podczas logowania.Odpowiedzi:
Nie jestem pewien, dlaczego masz awersję do robienia tego poprawnie - albo na serwerze a la
i
Lub dodając ~ / .hushlogin dla każdego użytkownika.
Wskazówka: w przypadku ~ / .hushlogin dodaj go do / etc / skel, aby nowe katalogi domowe użytkowników były tworzone z tym plikiem.
Aktualizacja:
Bez dodatkowych informacji na temat zadania tworzenia kopii zapasowej crona moją jedyną propozycją jest przekierowanie wyniku polecenia do pliku (lub pozwolenie, aby cron przechwycił go w wiadomości e-mail), a wyjście sesji ssh do / dev / null. Coś jak:
Lub
Musiałbym trochę się rozerwać przy użyciu poleceń, ale to powinno zacząć.
źródło
.hushlogin
jest miłeJeśli chcesz to dla poszczególnych użytkowników, po prostu zrób
touch ~/.hushlogin
i wszystko gotowe z OpenSSH.Aktualizacja : jak wskazano w innym miejscu,
pam_motd
może być skonfigurowany tak, aby nie korzystał z jednego użytkownika.hushlogin
; sprawdzić/etc/login.defs
zaHUSHLOGIN_FILE
. Może być skonfigurowany tak, aby wszyscy użytkownicy byli umieszczeni na liście/etc/hushlogins
lub podobnie.źródło
@ Uwaga Wszystkie przykłady zakładają, że ustawiłeś zmienną
connectionString
z czymś podobnymconnectionString=user@server
.Jak doszedłem do rozwiązania
Używanie
ssh -T
powinno działać w przypadku prostych poleceń. Na przykład nie drukuje żadnych dodatkowych informacji:Problem polega na tym, że próbujesz użyć tutaj doc do uruchomienia wielu poleceń. Na przykład - poniżej NIE zadziała - wyświetli echo wiadomości dnia (MoTD), a także może pokazać ci „standardowe: nie jest tty”.
Aby obejść ten problem, musisz najpierw zapisać polecenia w zmiennej lokalnej i wysłać je na zdalny serwer.
Ale to bałagan ...
Ostateczne rozwiązanie
Wykonaj funkcję uniwersalną (pamiętaj, że może ona przyjmować ciąg znaków lub HEREDOC jako polecenia).
Przykłady
Użyj tego w ten sposób:
Lub tak:
Lub tak:
Lub nawet tak:
źródło
Co powiesz na ten hack? ;-P
Poniżej znajduje nie obowiązuje:
Przekazywanie
-T
do ssh w celu wyłączenia alokacji tty:źródło
-t
Jaki to system operacyjny? W niektórych systemach (np. Ubuntu) motd nie jest drukowany przez serwer ssh (PrintMotd w / etc / ssh / sshd_config), ale przez pam z pam_motd. W takim przypadku prawdopodobnie nie możesz kontrolować tego z poziomu klienta.
źródło
Musisz to zrobić na serwerze:
Na debian / ubtuntu również haszuje linię z pam_motd.so:
źródło
Nie wykonuj polecenia ssh bezpośrednio przez crona.
Zamiast tego utwórz skrypt bash pomocnika , wykonując zadanie ssh i pobierając dane wyjściowe, błędy i kod błędu, jeśli to konieczne; ostatecznie przeanalizuj je, aby usunąć niechciane ciągi z komunikatów o błędach (w Twoim przypadku MoTD), a następnie ponownie wydrukuj dane wyjściowe skryptu bash i strumienie błędów, które uzyskałeś w taki sposób.
Następnie umieść ten skrypt bash w cron i żyj szczęśliwy :)
Uwaga: Jest to ogólne rozwiązanie i musi działać niezależnie od pracy, którą musisz wykonać za pośrednictwem ssh. To także tylko strona klienta, która powinna zaspokoić twoje potrzeby ... jedyną zależnością klienta od konfiguracji serwera jest znajomość dokładnej wiadomości, którą chcesz wyciąć ze standardowego błędu lub z klienta ssh
źródło
Po prostu sidenote (byłbym komentarzem, gdybym mógł to opublikować): Zawartość motd jest wyświetlana po udanym zalogowaniu do systemu. Jeśli chciałbym legalnie uniemożliwić ludziom dostęp do skrzynki, wolałbym to zrobić poprzez „Banner” w sshd_config. Zawartość jest wyświetlana po wprowadzeniu nazwy użytkownika, ale przed uwierzytelnieniem.
źródło
Albo nie próbowałeś tego, co opisujesz, albo twoje serwery są źle skonfigurowane!
Oto, co właśnie wypróbowałem na RHEL5:
Nie sądzę, że potrzebujesz przesłania wyłączenia odpowiedzialności do nieinteraktywnych powłok, prawda? (Jeśli ktoś twierdzi, że tak robisz, wyświadcz mi przysługę, skop je do szaleństwa). Ponieważ właśnie dlatego istnieje różnica między powłokami interaktywnymi i nieinteraktywnymi.
Ale w każdym razie oto, co robię, ponieważ nie lubię poczty od crona: przesyłam dane wyjściowe do programu rejestrującego. Po prostu przesuń go przez ogon, aby usunąć kilka pierwszych (powiedzmy 3) wierszy bezsensownego zrzeczenia się jako takiego (nieprzetestowany kod, nie mam dostępu do moich skryptów):
źródło
Jeśli cię rozumiem, potrzebujesz motd z innych powodów, ale nie potrzebujesz motd do tworzenia kopii zapasowych. W konfiguracji sshd nie można ustawić na podstawie użytkownika tylko globalnie. Dlatego musisz rozwiązać supresję motd po stronie klienta. Ale nie ma różnicy między tekstem motd a komunikatami o błędach oprogramowania do tworzenia kopii zapasowych. Oba są tekstem w terminalu. Jedyne rozwiązanie, które widzę, aby zrobić różnicę między tymi dwoma komunikatami, a następnie odfiltrować jeden komunikat motda. Ponieważ komunikaty oprogramowania są trudne do modyfikacji, sugeruję zmodyfikować tekst motd. Na przykład umieść ramkę wokół:
Następnie należy odfiltrować tekst między ramką i upuścić go.
źródło
ROZWIĄZANIE TUTAJ:
Jeśli nie jesteś odpowiedzialny za serwer i nie możesz zmienić konfiguracji motd lub sshd, użyj polecenia w następujący sposób:
Przekieruj STDERR do STDOUT dla komend zdalnych, abyś je zobaczył. A następnie przekieruj STDERR ssh do / dev / null. MOTD przechodzi do STERR i kończy się w / dev / null. Zostanie wyświetlony dowolny standardowy komunikat o błędzie ORAZ ze zdalnego polecenia (w przypadku STDOUT)
Wariant 1 - jeśli zależy Ci na statusie wyjścia zdalnie wykonywanej komendy:
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 $?
Wariant 2 - jeśli chcesz zignorować kod wyjścia komendy zdalnej - po prostu wykonaj true jako ostatnią komendę zdalną
ssh remotehost "(remote_command; true) 2>&1" 2>/dev/null || echo SSH connection failed
Przykłady komunikatów o błędach:
Przykład 1:
Przykład 2:
Przykład 3a:
Przykład 3b:
źródło
Czy próbowałeś usunąć tekst z pliku motd? Tylko myśl.
źródło
Co próbujesz zrobić i dlaczego przeszkadza Ci MoTD? Zgaduję, że wykonuję polecenie zdalne i analizuję dane wyjściowe? Jeśli tak, można to zrobić na wiele sposobów bez wywoływania interaktywnej powłoki (co powoduje wyświetlenie motd).
źródło
Czy próbowałeś użyć konfiguracji podsystemu ssh? Możesz znaleźć przykład na http://www.hell.org.ua/Docs/oreilly/tcpip2/ssh/ch05_07.htm, który zawiera nawet kopie zapasowe plików.
źródło