cat pipe otro command de gato

cat ~/.ssh/id_rsa.pub | ssh user@123.45.56.78 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys" 

alguien puede explicar cómo funcionan las citas.

Por lo que entiendo Estoy leyendo la key pública en mi disco y luego conectándola al server, creando un directory si no existe y luego … ¿estoy usando esta segunda concatenación para leer desde mi disco? ¿Qué está siendo concatenado?

Se vuelve confuso porque estoy acostumbrado a ver un file después del command cat.

El command cat es capaz de concatenar files e imprimirlos en la salida estándar.
Cuando se invoca sin especificar ningún file o con un - , leerá la input estándar.
En tu command, se usa de las dos maneras.

Paso a paso:

  • La primera parte de su command ( cat ~/.ssh/id_rsa.pub ) hace exactamente lo que usted entiende: imprime el file local ~/.ssh/id_rsa.pub a la salida estándar.
  • Entonces con el símbolo | usted networkingirige la salida estándar local como input estándar al siguiente command ( ssh ).
  • El command ssh prácticamente hará que ejecute el command dentro de la cadena "" en la máquina remota pasando la input estándar de la tubería.
  • Dentro de la cadena:
    • ~/.ssh el directory ~/.ssh y gracias a la opción -p no generará un error si el directory simplemente existe.
    • Con el operador && ejecutará el siguiente cat solo si el mkdir anterior sale sin errores.
    • El último cat >> ~/.ssh/authorized_keys es una invocación de cat sin file . Su salida se adjuntará (si es posible) al file ~/.ssh/authorized_keys gracias al operador de networkingirección ( >> ).

Notas:

  • En muchos sistemas existe el command ssh-copy-id para copyr las keys locales en la máquina remota. Para get más información, escriba man ssh-copy-id

    ssh-copy-id: use keys disponibles localmente para autorizar inicios de session en una máquina remota

  • Según lo declarado por roalma en el comentario, la línea de command original puede funcionar o no según la configuration (restrictiva) de la configuration de ssh .