Tengo una configuración SSH sin contraseña, sin embargo, imprime el MoTD cuando inicia sesión. ¿Hay alguna forma de evitar que eso suceda desde el lado del cliente?
Lo he intentado ssh -q
pero eso no funciona. No quiero usar ~/.hushlogin
ni quiero cambiar la configuración del servidor. Lo único que puede funcionar es silenciar toda la salida, con >/dev/null 2>&1
. Sin embargo, no quiero ignorar los errores en caso de que realmente haya un problema. Incluso hacer >/dev/null
no funciona, ya que ssh
parece imprimir el motd en el stderr.
Actualización y razonamiento Estoy ejecutando copia de seguridad en un cron. No quiero recibir un correo electrónico cron a menos que se haya producido un error. Sin embargo, si se imprime el motd, recibiré un correo electrónico todo el tiempo.
Quiero que se imprima el motd porque eso tiene implicaciones legales. La motd dice "acceso no autorizado prohibido". Debe tener este tipo de declaración para evitar legalmente que las personas accedan a ella (como un letrero de no traspaso). Por lo tanto, no quiero deshabilitarlo todo el tiempo.
/etc/profile.d
hay secuencias de comandos que puedan ejecutarse allí e imprimir algunos resultados en la consola al iniciar sesión.Respuestas:
No estoy seguro de por qué tienes aversión a hacer esto correctamente, ya sea en el servidor a la
y
O agregando ~ / .hushlogin para cada usuario.
Sugerencia, para ~ / .hushlogin, agréguelo a / etc / skel para que se creen nuevos directorios de inicio de usuario con el archivo.
Actualizar:
Sin más información sobre su trabajo cron de respaldo, mi única otra sugerencia es redirigir la salida del comando a un archivo (o dejar que cron lo capture en el correo electrónico) y la salida de la sesión ssh a / dev / null. Algo como:
O
Tendría que jugar un poco con los comandos, pero eso debería ayudarlo a comenzar.
fuente
.hushlogin
es agradableSi desea esto por usuario, simplemente haga una
touch ~/.hushlogin
y ya está todo listo con OpenSSH.Actualización : como se señaló en otra parte,
pam_motd
se puede configurar para que no use un usuario.hushlogin
; comprobar/etc/login.defs
paraHUSHLOGIN_FILE
. Se puede configurar para tener a todos los usuarios enumerados/etc/hushlogins
o similares.fuente
@note Todos los ejemplos suponen que ha establecido una variable
connectionString
con algo asíconnectionString=user@server
.Como llegué a la solución
Usar
ssh -T
debería funcionar para comandos simples. Por ejemplo, esto no imprime ninguna información adicional:El problema es cuando intentas usar here-doc para ejecutar muchos comandos. Por ejemplo, abajo NO funcionará, hará eco del mensaje del día (MoTD) y también podría mostrarle "stdin: no es un tty".
Para solucionar el problema, primero debe guardar los comandos en la variable local y luego enviarlos al servidor remoto.
Pero eso es desordenado ...
Solución final
Haga una función universal (tenga en cuenta que puede tomar una cadena o HEREDOC como comandos).
Ejemplos
Use esto así:
O así:
O así:
O incluso así:
fuente
¿Qué tal este truco? ;-PAGS
Lo siguiente no es válido:
Pasando
-T
a ssh para deshabilitar la asignación de tty:fuente
-t
¿Qué sistema operativo es este? En algunos sistemas (como ubuntu) el servidor ssh no imprime el motd (PrintMotd en / etc / ssh / sshd_config), sino mediante pam con pam_motd. Si este es el caso, entonces probablemente no pueda controlarlo desde el cliente.
fuente
Tienes que hacerlo en el servidor:
En debian / ubtuntu también hash la línea con pam_motd.so:
fuente
No ejecute el comando ssh directamente por cron.
Cree un script bash auxiliar en su lugar, ejecute el trabajo ssh y obtenga la salida, los errores y el código de error si es necesario; finalmente, analícelos para eliminar cadenas no deseadas de los mensajes de error (el MoTD en su caso) y luego vuelva a imprimir en la salida del script bash y las secuencias de error que haya obtenido de esa manera.
Que poner este script bash en cron y vivir feliz :)
Nota: Esta es una solución general y tiene que funcionar sea cual sea el trabajo que debe realizar a través de ssh. También es solo del lado del cliente, lo que debe satisfacer sus necesidades ... la única dependencia del cliente en la configuración del servidor es el conocimiento del mensaje exacto que desea cortar del std err o del cliente ssh
fuente
Solo una nota al margen (habría sido un comentario, si pudiera publicar eso): el contenido de motd se muestra después de iniciar sesión con éxito en el sistema. Si quisiera evitar legalmente que las personas accedan a un cuadro, prefiero hacerlo con un "Banner" en sshd_config. El contenido se muestra después de ingresar el Nombre de usuario pero antes de la autenticación.
fuente
¡O no has probado lo que estás describiendo, o tus servidores están configurados incorrectamente!
Esto es lo que acabo de probar en RHEL5:
Supongo que no necesita que se envíe el descargo de responsabilidad a los shells no interactivos, ¿verdad? (Si alguien dice que sí, hágame un favor, déjelos en paz). Porque es exactamente por eso que hay una distinción entre shells interactivos y no interactivos.
Pero en cualquier caso, esto es lo que hago porque no me gusta el correo de cron: canalizo la salida al registrador. Simplemente colóquelo a través de la cola para eliminar las primeras líneas (digamos 3) de su descargo de responsabilidad sin sentido como tal (código no probado, no tengo acceso a mis scripts):
fuente
Si te entiendo, necesitas motd por otras razones, pero no necesitas motd como respaldo. En la configuración de sshd no se puede configurar por usuario solo globalmente. Por lo tanto, necesita resolver la supresión de motd en el lado del cliente. Pero no hay diferencia entre el texto de motd y los mensajes de error del software de respaldo. Ambos son texto en la terminal. La única solución que veo para marcar la diferencia entre estos dos mensajes es filtrar el mensaje de Motd. Debido a que los mensajes de software son difíciles de modificar, sugiero modificar el texto de motd. Por ejemplo, ponga un marco alrededor:
Luego, debe filtrar el texto entre el marco y soltarlo.
fuente
SOLUCIÓN AQUÍ:
En caso de que no esté a cargo del servidor y no pueda cambiar la configuración de motd o sshd, use un comando como el siguiente:
Redireccione STDERR a STDOUT para comando (s) remoto (s) para que lo vea. Y luego redirija STDERR de ssh a / dev / null. MOTD va a STERR y termina en / dev / null. Se mostrará cualquier mensaje estándar Y de error del comando remoto (a medida que va a STDOUT)
Variante 1: si le importa el estado de salida del comando ejecutado de forma remota:
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 desea ignorar el código de salida del comando remoto, simplemente ejecute true como el último comando remoto
ssh remotehost "(remote_command; true) 2>&1" 2>/dev/null || echo SSH connection failed
Ejemplos de mensajes de error:
Ejemplo 1:
Ejemplo 2
Ejemplo 3a:
Ejemplo 3b:
fuente
¿Has intentado eliminar el texto en el archivo motd? Solo un pensamiento.
fuente
¿Qué estás tratando de hacer y por qué te molesta el MoTD? ¿Supongo que ejecutar un comando remoto y analizar la salida? Si es así, esto podría hacerse de varias maneras sin invocar un shell interactivo (lo que hace que se muestre el motd).
fuente
¿Has intentado usar una configuración de subsistema ssh? Puede encontrar un ejemplo en http://www.hell.org.ua/Docs/oreilly/tcpip2/ssh/ch05_07.htm que incluso incluye copias de seguridad de archivos.
fuente