stdout
en un servidor CentOS debe conectarse a stdin
otro servidor CentOS. es posible?
Actualizar
ScottPack, MikeyB y jofel tienen respuestas válidas. Le di la respuesta a Scott porque, aunque mi pregunta no especificaba la seguridad como un requisito, siempre es bueno estar seguro. Sin embargo, las sugerencias de los otros dos compañeros también funcionarán.
Respuestas:
Este es un sí descarado.
Cuando uno usa
ssh
para ejecutar un comando en un servidor remoto, realiza algún tipo de redireccionamiento interno de entrada / salida sofisticado. De hecho, creo que esta es una de las características más sutiles de OpenSSH. En concreto, si se utilizassh
para ejecutar un comando arbitrario en un sistema remoto, a continuación, ssh mapaSTDIN
ySTDOUT
a la del comando que se está ejecutando.A modo de ejemplo, supongamos que desea crear un tarball de respaldo, pero no quiere o no puede almacenarlo localmente. Echemos un vistazo a esta sintaxis:
Estamos creando un tarball y escribiéndolo en
STDOUT
cosas normales. Como estamos usando ssh para ejecutar un comando remoto, STDIN se asigna alSTDIN
decat
. Que luego redirigimos a un archivo.fuente
netcat
en ambos extremos se convierte en un gran canal de comunicación simple y fácil.tar cf - /path/to/dir | nc 1.2.3.4 5000
en un servidor,nc -l -p 5000 > backupfile.tar
en el otro.Una forma conveniente de canalizar datos entre hosts cuando no necesita preocuparse por la seguridad a través del cable es usar
netcat
ambos extremos de la conexión.Esto también le permite configurarlos de forma asíncrona:
En el "receptor" (realmente, tendrá comunicación bidireccional, pero es más fácil pensarlo así), ejecute:
Y en el "remitente", ejecute:
fuente
Una herramienta muy poderosa para crear conexiones unidireccionales y bidireccionales es
socat
. Para un breve vistazo a las posibilidades, vea los ejemplos en su página de manual .Reemplaza
netcat
y herramientas similares por completo y tiene soporte para conexiones cifradas SSL. Para los principiantes, puede que no sea lo suficientemente simple, pero al menos es bueno saber que existe.fuente
TL; DR
Las cosas solo se vuelven un poco más complicadas cuando tienes un servidor bastión que debe usarse.
Puede pasar
ssh
como el comando quessh
desee:cat local_script.sh | ssh -A usera@bastion ssh -A userb@privateserver "cat > remote_copy_of_local_script.sh; bash remote_copy_of_local_script.sh"
Cuidado con los pseudo terminales
Tenga en cuenta que el punto de importancia clave aquí es que
ssh
, como la mayoría de las herramientas, solo tratastdout
ystdin
corrige por defecto.Sin embargo, cuando comience a ver la opción Me gusta
Disable pseudo-terminal allocation.
yForce pseudo-terminal allocation.
es posible que deba hacer un poco de prueba y error. Pero, como regla general , no desea alterar eltty
comportamiento a menos que esté tratando de arreglar basura ilegible / binaria en un emulador de terminal (lo que un humano escribe).Por ejemplo, tiendo a usarlo
-At
para que el agente ssh de mi estación de trabajo se reenvíe, y para que ejecutar tmux de forma remota no interrumpa el binario (asíssh -At bastion.internal tmux -L bruno attach
). Y, para Docker también (como asísudo docker exec -it jenkins bash
).Sin embargo, esas dos
-t
banderas causan algunos daños en los datos difíciles de rastrear cuando intento hacer algo como esto:fuente
Intente poner su clave pública ssh en otro host con solo un comando
fuente
Creo que esto es lo más fácil, después de configurar el protocolo de enlace sin contraseña entre servidores para el usuario que está ejecutando el comando como:
Sin comprimir
Compresión sobre la marcha
fuente
ssh
ya está configurado para la compresión.Compression
podría establecerse en cualquiera de los archivos de configuración, una comprobación rápida es para ver sissh -v localhost exit 2>&1 | fgrep -i compress
da algún resultado (AFAIK no hay opción para volcar la configuración ya que ssh la ha leído).tar
tiene una-C path
bandera que funciona para los comandosc
yx
. No tiene que poner uncd
comando separado allí. (Pero es bueno tener en cuenta que puede ejecutar más de un comando.)-C
es una extensión de GNU (aunque ahora también es compatible con bsdtar y schily tar)