Ich habe SSH passwortlos eingerichtet, aber es druckt das MoTD, wenn es sich anmeldet. Gibt es trotzdem eine Möglichkeit, dies vom Client aus zu verhindern?
Ich habe es versucht, ssh -q
aber das funktioniert nicht. Ich möchte ~/.hushlogin
den Server nicht verwenden oder ändern. Das einzige, was funktionieren kann, ist, die gesamte Ausgabe mit leiser zu machen >/dev/null 2>&1
. Ich möchte jedoch keine Fehler ignorieren, falls tatsächlich ein Problem vorliegt. Selbst das >/dev/null
geht nicht, da ssh
das Motiv anscheinend auf die stderr gedruckt wird.
Update & Argumentation Ich führe ein Backup in einem Cron durch. Ich möchte keine Cron-E-Mail erhalten, es sei denn, ein Fehler ist aufgetreten. Wenn das Motiv gedruckt wird, erhalte ich jedoch die ganze Zeit eine E-Mail.
Ich möchte, dass das Motiv weiterhin gedruckt wird, da dies rechtliche Auswirkungen hat. Das motd sagt "unathorized Zugang verboten". Sie müssen diese Art von Erklärung enthalten, um den Zugriff von Personen zu verhindern (wie ein Verbotsschild). Daher möchte ich es nicht die ganze Zeit pauschal deaktivieren.
/etc/profile.d
Skripten zu suchen, die dort ausgeführt werden, und beim Anmelden eine Ausgabe an die Konsole zu drucken.Antworten:
Ich bin mir nicht sicher, warum Sie eine Abneigung dagegen haben, dies richtig zu tun - entweder auf dem Server a la
und
Oder ~ / .hushlogin für jeden Benutzer hinzufügen.
Fügen Sie es für ~ / .hushlogin zu / etc / skel hinzu, damit mit der Datei neue Benutzerverzeichnisse erstellt werden.
Aktualisieren:
Ohne weitere Informationen zu Ihrem Sicherungs-Cron-Job ist mein einziger anderer Vorschlag, die Ausgabe des Befehls in eine Datei umzuleiten (oder von Cron in E-Mails erfassen zu lassen) und die Ausgabe der SSH-Sitzung nach / dev / null. So etwas wie:
Oder
Ich würde ein bisschen mit den Befehlen herumspielen müssen, aber das sollte Ihnen den Einstieg erleichtern.
quelle
.hushlogin
is niceWenn Sie dies auf Benutzerbasis möchten, führen Sie einfach eine aus
touch ~/.hushlogin
und Sie sind mit OpenSSH fertig.Update : Wie an anderer Stelle erwähnt,
pam_motd
kann so konfiguriert werden, dass kein Benutzer verwendet wird.hushlogin
. Check/etc/login.defs
fürHUSHLOGIN_FILE
. Es kann so konfiguriert werden, dass alle Benutzer in/etc/hushlogins
oder ähnlich aufgeführt sind.quelle
@note Bei allen Beispielen wird davon ausgegangen, dass Sie eine Variable
connectionString
mit so etwas wie festgelegt habenconnectionString=user@server
.Wie ich zur Lösung kam
Verwenden
ssh -T
sollte für einfache Befehle funktionieren. Dies gibt beispielsweise keine zusätzlichen Informationen aus:Das Problem ist, wenn Sie versuchen, mit here-doc viele Befehle auszuführen. Zum Beispiel - unten wird NICHT funktionieren - es wird die Nachricht des Tages (MoTD) wiedergeben und es könnte auch angezeigt werden "stdin: is not a tty".
Um dieses Problem zu umgehen, müssen Sie zuerst die Befehle in der lokalen Variablen speichern und an den Remote-Server senden.
Aber das ist chaotisch ...
Endgültige Lösung
Erstellen Sie eine universelle Funktion (beachten Sie, dass als Befehle ein String oder HEREDOC verwendet werden kann).
Beispiele
Verwenden Sie dies wie folgt:
Oder wie folgt:
Oder wie folgt:
Oder auch so:
quelle
Wie wäre es mit diesem Hack? ;-P
Folgendes ist nicht gültig:
Übergabe
-T
an ssh, um die Zuweisung von tty zu deaktivieren:quelle
-t
Welches Betriebssystem ist das? Auf einigen Systemen (wie Ubuntu) wird die Motd nicht vom SSH-Server (PrintMotd in / etc / ssh / sshd_config) gedruckt, sondern von pam mit pam_motd. Wenn dies der Fall ist, können Sie es wahrscheinlich nicht vom Client aus steuern.
quelle
Du musst es auf dem Server machen:
Auf debian / ubtuntu hat auch die Zeile mit pam_motd.so:
quelle
Führen Sie den Befehl ssh nicht direkt von cron aus.
Erstellen Sie stattdessen ein Hilfsbash-Skript , führen Sie den ssh-Job aus und rufen Sie bei Bedarf die Ausgabe, die Fehler und den Fehlercode ab. Analysieren Sie sie schließlich, um unerwünschte Zeichenfolgen aus Fehlermeldungen zu entfernen (in Ihrem Fall das MoTD) und drucken Sie die Bash-Skript-Ausgabe und die so erhaltenen Fehlerströme erneut aus.
Dann lege dieses Bash-Skript in cron und lebe glücklich :)
Hinweis: Dies ist eine allgemeine Lösung und muss funktionieren, was auch immer der Job ist, den Sie über ssh ausführen müssen. Es ist auch nur die Client-Seite, die Ihre Anforderungen erfüllen sollte ... Die einzige Abhängigkeit des Clients von der Serverkonfiguration besteht in der Kenntnis der genauen Nachricht, die Sie aus dem Standardfehler oder aus dem SSH-Client herausschneiden möchten
quelle
Nur eine Randnotiz (wäre ein Kommentar gewesen, wenn ich das posten könnte): Der Inhalt von motd wird nach erfolgreicher Anmeldung im System angezeigt . Wenn ich legal verhindern möchte, dass Leute auf eine Box zugreifen, mache ich das lieber mit einem "Banner" in sshd_config. Der Inhalt wird nach Eingabe des Benutzernamens, aber vor der Authentifizierung angezeigt.
quelle
Entweder haben Sie nicht versucht, was Sie beschreiben, oder Ihre Server sind falsch konfiguriert!
Folgendes habe ich gerade auf RHEL5 ausprobiert:
Ich nehme nicht an, dass Sie den Haftungsausschluss für nicht interaktive Shells benötigen, oder? (Wenn jemand behauptet, dass Sie das tun, tun Sie mir einen Gefallen, und treten Sie ihn in die Nüsse.) Genau aus diesem Grund wird zwischen interaktiven und nicht interaktiven Shells unterschieden.
Aber auf jeden Fall mache ich Folgendes, weil ich keine E-Mails von cron mag: Ich leite die Ausgabe an logger weiter. Leiten Sie es einfach durch den Schwanz, um die ersten paar (sagen wir 3) Zeilen Ihres sinnlosen Haftungsausschlusses als solchen zu entfernen (ungetesteter Code, ich habe keinen Zugriff auf meine Skripte):
quelle
Wenn ich Sie verstehe, brauchen Sie motd aus anderen Gründen, aber nicht für das Backup. In der Konfiguration von sshd kann man es nicht benutzerbezogen nur global einrichten. Daher müssen Sie die Motd-Unterdrückung auf der Client-Seite lösen. Es besteht jedoch kein Unterschied zwischen dem Text von motd und den Fehlermeldungen der Sicherungssoftware. Beides ist Text im Terminal. Die einzige Lösung, die ich sehe, um einen Unterschied zwischen diesen beiden Meldungen zu machen, ist das Filtern der Motd-Meldung. Da die Meldungen der Software schwer zu ändern sind, schlage ich vor, den Text von motd zu ändern. Zum Beispiel setzen Sie einen Rahmen um:
Dann sollten Sie den Text zwischen den Rahmen herausfiltern und ablegen.
quelle
LÖSUNG HIER:
Wenn Sie nicht für den Server verantwortlich sind und die Konfiguration von motd oder sshd nicht ändern können, verwenden Sie den folgenden Befehl:
Leiten Sie STDERR für Remote-Befehle zu STDOUT um, damit Sie es sehen. Und dann leiten Sie STDERR von ssh nach / dev / null um. MOTD geht zu STERR und landet in / dev / null. Jede Standard-UND-Fehlermeldung vom Remote-Befehl wird angezeigt (wie es zu STDOUT geht)
Variante 1 - Wenn Sie sich für den Exit-Status des remote ausgeführten Befehls interessieren:
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 $?
Variante 2 - Wenn Sie den Exit-Code des Remote-Befehls ignorieren möchten, führen Sie einfach true als letzten Remote-Befehl aus
ssh remotehost "(remote_command; true) 2>&1" 2>/dev/null || echo SSH connection failed
Beispiele für Fehlermeldungen:
Beispiel 1:
Beispiel 2:
Beispiel 3a:
Beispiel 3b:
quelle
Haben Sie versucht, den Text in der Motd-Datei zu entfernen? Nur ein Gedanke.
quelle
Was versuchst du zu tun und warum stört dich das MoTD? Ich vermute, einen Remote-Befehl auszuführen und die Ausgabe zu analysieren? In diesem Fall kann dies auf verschiedene Arten erfolgen, ohne dass eine interaktive Shell aufgerufen wird (wodurch das Motiv angezeigt wird).
quelle
Haben Sie versucht, ein SSH-Subsystem zu konfigurieren? Ein Beispiel finden Sie unter http://www.hell.org.ua/Docs/oreilly/tcpip2/ssh/ch05_07.htm , das sogar das Sichern von Dateien umfasst.
quelle