SSH est configuré sans mot de passe, mais il imprime le MoTD lorsqu'il se connecte. Est-il possible d'empêcher que cela se produise côté client?
J'ai essayé ssh -q
mais ça ne marche pas. Je ne veux pas utiliser ~/.hushlogin
et je ne veux pas changer la configuration du serveur. La seule chose qui peut fonctionner est de calmer toutes les sorties, avec >/dev/null 2>&1
. Cependant, je ne veux pas ignorer les erreurs au cas où il y aurait un problème. Même faire >/dev/null
ne fonctionne pas, car ssh
semble imprimer le motd au stderr.
Mise à jour et raisonnement J'effectue une sauvegarde dans un cron. Je ne veux pas recevoir d'email cron sauf si une erreur est survenue. Cependant, si le motd est imprimé, je recevrai tout le temps un courrier électronique.
Je veux garder le motd en cours d’impression car cela a des implications juridiques. Le motd dit "accès non autorisé interdit". Vous devez disposer de ce type de déclaration afin d'empêcher légalement les personnes d'y accéder (comme un panneau interdisant l'intrusion). Par conséquent, je ne veux pas masquer le désactiver tout le temps.
/etc/profile.d
de tous les scripts pouvant s’y exécuter et d’imprimer une sortie sur la console lors de la connexion.Réponses:
Je ne sais pas pourquoi vous avez une aversion à le faire correctement - soit sur le serveur à la
et
Ou en ajoutant ~ / .hushlogin pour chaque utilisateur.
Astuce, pour ~ / .hushlogin, ajoutez-le à / etc / skel afin que de nouveaux répertoires personnels d’utilisateur soient créés avec le fichier.
Mise à jour:
Sans plus d'informations sur votre tâche cron de sauvegarde, ma seule autre suggestion est de rediriger le résultat de la commande vers un fichier (ou de le laisser capturer par courrier électronique) et le résultat de la session ssh vers / dev / null. Quelque chose comme:
Ou
Il faudrait que je joue un peu avec les commandes, mais cela devrait vous aider à démarrer.
la source
.hushlogin
is niceSi vous le souhaitez, utilisateur par utilisateur, faites-en un
touch ~/.hushlogin
et vous êtes prêt avec OpenSSH.Mise à jour : comme indiqué ailleurs,
pam_motd
peut être configuré pour ne pas utiliser un utilisateur spécifique.hushlogin
; vérifier/etc/login.defs
pourHUSHLOGIN_FILE
. Il peut être configuré pour que tous les utilisateurs soient répertoriés/etc/hushlogins
ou similaires.la source
@note Tous les exemples supposent que vous ayez défini une variable
connectionString
avec quelque chose commeconnectionString=user@server
.Comment je suis arrivé à la solution
Utiliser
ssh -T
devrait fonctionner pour des commandes simples. Par exemple, cela n’affiche aucune information supplémentaire:Le problème est lorsque vous essayez d'utiliser here-doc pour exécuter de nombreuses commandes. Par exemple - ci-dessous ne fonctionnera PAS - cela fera écho au message du jour (MoTD) et pourrait également vous montrer "stdin: n'est pas un tty".
Pour résoudre le problème, vous devez d’abord enregistrer les commandes dans une variable locale, puis les envoyer au serveur distant.
Mais c'est désordonné ...
Solution finale
Créez une fonction universelle (notez qu’elle peut prendre une chaîne ou HEREDOC comme commandes).
Exemples
Utilisez ceci comme suit:
Ou comme si:
Ou comme si:
Ou même comme ça:
la source
Que diriez-vous de ce hack? ;-P
Ce qui suit n'est pas valide:
Passer
-T
à ssh pour désactiver l’allocation de tty:la source
-t
Quel est le système d'exploitation? Sur certains systèmes (comme Ubuntu), le motd n'est pas imprimé par le serveur ssh (PrintMotd dans / etc / ssh / sshd_config), mais par pam avec pam_motd. Si tel est le cas, vous ne pourrez probablement pas le contrôler depuis le client.
la source
Vous devez le faire sur le serveur:
Sur debian / ubtuntu, hachez également la ligne avec pam_motd.so:
la source
N'exécutez pas la commande ssh directement par cron.
Créez à la place un script d'aide bash , exécutant le travail ssh et récupérant la sortie, les erreurs et le code d'erreur si nécessaire; éventuellement les analyser afin de supprimer les chaînes non désirées des messages d'erreur (le MoTD dans votre cas), puis réimprimez sur la sortie du script bash et l'erreur diffuse ce que vous avez obtenu de cette manière.
Alors mettez ce script bash dans cron et vivez heureux :)
Note: Ceci est une solution générale, et doit travailler quel que soit le travail que vous devez effectuer via ssh. C’est uniquement le côté client également, ce qui devrait répondre à vos besoins ... la seule dépendance du client vis-à-vis de la configuration du serveur est la connaissance du message exact que vous voulez supprimer de la commande std err ou du client ssh
la source
Juste une note de bas de page (cela aurait été un commentaire, si je pouvais poster ça): Le contenu de motd est affiché après une connexion réussie au système. Si je veux empêcher légalement les gens d'accéder à une boîte, je préférerais le faire avec une "bannière" dans sshd_config. Le contenu est affiché après la saisie du nom d'utilisateur mais avant l'authentification.
la source
Soit vous n’avez pas essayé ce que vous décrivez, soit vos serveurs sont mal configurés!
Voici ce que je viens d'essayer sur RHEL5:
Je suppose que vous n'avez pas besoin que l'avertissement soit envoyé aux shells non interactifs, n'est-ce pas? (Si quelqu'un prétend le faire, faites-moi une faveur, donnez-lui un coup de pied.) C'est précisément la raison pour laquelle il existe une distinction entre les coquilles interactives et les coquilles non interactives.
Mais dans tous les cas, voici ce que je fais parce que je n'aime pas le courrier de cron: je dirige la sortie vers le consignateur. Il suffit de le glisser dans la queue pour supprimer les premières lignes (disons 3) de votre clause de non-responsabilité en tant que telle (code non testé, je n’ai pas accès à mes scripts):
la source
Si je vous comprends bien, vous avez besoin de motd pour d'autres raisons, mais vous n'avez pas besoin de motd pour la sauvegarde. Dans la configuration de sshd, vous ne pouvez pas le configurer par utilisateur, mais globalement. Par conséquent, vous devez résoudre la suppression motd du côté client. Mais il n'y a pas de différence entre le texte de motd et les messages d'erreur du logiciel de sauvegarde. Les deux sont du texte dans le terminal. La seule solution que je vois pour faire la différence entre ces deux messages filtre ensuite celui de motd. Comme les messages du logiciel sont difficiles à modifier, je suggère de modifier le texte de motd. Par exemple, mettez un cadre autour de:
Ensuite, vous devriez filtrer le texte entre le cadre et le déposer.
la source
SOLUTION ICI:
Si vous n'êtes pas en charge du serveur et que vous ne pouvez pas modifier motd ou sshd config, utilisez la commande suivante:
Réorientez STDERR vers STDOUT pour une ou plusieurs commandes distantes afin de pouvoir le voir. Et redirigez ensuite STDERR of ssh vers / dev / null. MOTD va à STERR et se termine dans / dev / null. Tout message d'erreur AND standard de la commande à distance sera affiché (comme il est envoyé à STDOUT)
Variante 1 - si vous vous souciez de l'état de sortie de la commande exécutée à distance:
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 - si vous voulez ignorer le code de sortie de la commande distante - exécutez simplement true comme dernière commande distante
ssh remotehost "(remote_command; true) 2>&1" 2>/dev/null || echo SSH connection failed
Exemples de messages d'erreur:
Exemple 1:
Exemple 2:
Exemple 3a:
Exemple 3b:
la source
Avez-vous essayé de supprimer le texte dans le fichier motd? Juste une pensée.
la source
Qu'essayez-vous de faire et pourquoi le ministère des Transports vous dérange-t-il? Je devine en train d'exécuter une commande à distance et d'analyser la sortie? Si tel est le cas, cela peut être effectué de différentes manières sans invoquer un shell interactif (ce qui entraîne l'affichage du motd).
la source
Avez-vous essayé d'utiliser une configuration de sous-système ssh? Vous trouverez un exemple à l' adresse http://www.hell.org.ua/Docs/oreilly/tcpip2/ssh/ch05_07.htm, qui inclut même la sauvegarde de fichiers.
la source