Copie archivos binarios de otro sistema solo con comandos de shell integrados

Copie archivos binarios de otro sistema solo con comandos de shell integrados

Accidentalmente acabo de eliminar la biblioteca compartida crítica y ahora no se puede ejecutar ningún ejecutable vinculado dinámicamente. Por ejemplo, incluso /bin/lsmuestra error while loading shared libraries: libunwind.so.8: cannot open shared object file: No such file or directory.

Ni siquiera puedo volver a copiar el archivo eliminado porque ssh deja de funcionar ( scpno puede iniciar una nueva conexión). Y no puedo quitar el disco de la computadora y volver a escribir el archivo correcto: es un dispositivo integrado y no hay un disco extraíble.

Solo yo tengo una sesión de shell todavía existente, que no debo cerrar bajo ninguna circunstancia: porque no podré abrir una nueva sesión.

¿Cómo puedo transferir archivos binarios (biblioteca compartida) desde otro sistema mediante solo comandos de shell integrados (como echo, printf, read, etc.)?

Respuesta1

Podrías probar el bus TCP /dev/tcp integrado en Bash:

http://fibrevillage.com/scripting/603-dev-tcp-examples-and-trouble-shooting

Debería poder formular una solicitud HTTP usando eso, para poder extraer el archivo a través de HTTP.

Respuesta2

Si /dev/tcp no está disponible, se puede utilizar una solución alternativa, como se describe a continuación.

En la máquina de destino, dé el siguiente comando:

(while read -s l; do echo "$l"; done) > temp.txt

Luego en la PC realice las siguientes acciones:

  1. instalar x11-utils(necesidad xwininfo) y xdotool;
  2. determine la identificación de la ventana de la consola, en la que se encuentra la sesión ssh: utilícela xwininfo;
  3. dé el siguiente comando para transferir datos:
od -An -v -tx1 file.bin | (while read l; do xdotool type --delay 0 --window 0xa0000d "$(echo -e \"$l\r\")"; sleep 0.02; echo -ne .; done)

Si los datos transferidos aparecen en consolas ssh en formato hexadecimal sin formato, debe aumentar el retraso (el lado receptor no es lo suficientemente rápido).

  1. Una vez finalizado el envío, presione Entery Ctrl-Den la consola ssh, luego proporcione el siguiente comando para convertir el archivo recibido de hexadecimal a binario:
(while read -s l; do for c in $l; do printf "\x$c"; done; done) < temp.txt > file.bin
  1. Verifique la longitud del archivo con el comando: (x=0; IFS=""; while read -d '' -s -r -n 1 c; do x=$(($x+1)); done; echo $x) < file.bin.

  2. Y si la longitud coincide (no se perdieron datos durante una transmisión no confiable), puede copiar el archivo a la ubicación deseada:

(IFS=""; while read -d '' -s -r -n 1 c; do printf "%c" "$c"; done) < file.bin > destination

información relacionada