La idea es copiar archivos entre máquinas evitando instalar o instalando lo menos posible, quizás aprovechar algo ya instalado. Es un visión centrada en linux, contemplando el escenario del intercambio entre una virtual y su anfitrión sin habilitar "shared folder" y un fuerte sabor a sistemas embebidos, donde quizás no podés instalar nada y tenés que arreglártelas con lo que hay.
No es una lista completa, es más bien útil y que de algún modo he usado alguna vez.
SCP/SFTP/SSHFS
Estos son los métodos correctos, son seguros, respetan confidencialidad, integridad y autenticación, si los tenés no hay motivo para que sigas leyendo.
Pero eso es si ya los tenés instalados o podés instalarlos...
FTP/rsync
Estos son métodos comunes, en el caso de FTP completamente inseguro, en el de rsync, si hay ssh disponible, seguro.
rsync es probablemente el mejor método para copias grandes, pues en caso de interrupción no vuelve a copiar todo, pero recordemos que el alcance de esta cheatsheet es otro, zafar de una situación muy particular esta vez evitando tocar nada. De todos modos, esta es la línea:
rsync file.txt user@192.168.1.13:~/file.txt
SneakerNet
Viene de los tiempos de los diskettes, ahora con pendrives o memorias.
Si uno de los sistemas es windows, hay que usar un filesystem por éste soportado como FAT32, NTFS o exFAT.
netcat
Tambien se llama nc y es un programa de interacción con la red a muy bajo nivel.
Del lado del destino, ponele que es 192.168.1.13:
nc -l 8000 > file
Del lado del origen:
nc 192.168.1.13 8000 < file
Para copiar múltiples archivos, combinar con tar:
Destino:
nc -l 8000 | tar -xz
Origen:
tar -cz file* | nc localhost 8000
Puede ser útil el parámetro -w para definir un timeout.
Servidores embebidos
Del lado del servidor
Download
Si tenés un php-cli instalado, del lado del servidor
php -S 0.0.0.0:8000
Si tenés un python3 instalado, del lado del servidor:
python3 -m http.server
Una lista más completa https://gist.github.com/willurd/5720255, pero se alejan del one-liner simple.
Upload
ini_set('post_max_filesize ','10G');
if(isset($_POST["submit"])) {
copy( $_FILES["fileToUpload"]["tmp_name"],
} else {
?>
<!DOCTYPE html>
<html>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
Select filee to upload:
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Upload File" name="submit">
</form>
</body>
</html>
<?php
}
?>
php -S 0.0.0.0:8000
Del lado del cliente
Podés acceder con curl, wget o cualquier navegador a la url:
http://192.168.1.13:8000/file.txt
Para compartir una carpeta podés comprimirla primero o fabricar un index.html con:
for FILE in *; do
echo "<a href=\"./$FILE\">$FILE</a><br/>"
done > index.html
Casos locos
Tenés ssh pero no scp
Ni sé si existe esa posibilidad.
Esto te copia desde allá hasta acá:
ssh user@192.168.1.13 cat file.txt > file.txt
Esto te copia desde acá hasta alla:
cat file.txt | ssh user@192.168.1.13 'cat > file.txt'
Sólo tenés telnet o una terminal serial y podés copiar y pegar
Si el archivo es de texto vas copiando y pegando. Si no lo es, como puede ser un tgz o un binario, le aplicás base64 para convertirlo en texto y luego revertís el proceso.
cat /bin/ls | base64 | head
f0VMRgIBAQAAAAAAAAAAAAIAPgABAAAAoElAAAAAAABAAAAAAAAAADjnAQAAAAAAAAAAAEAAOAAJ
AEAAHQAcAAYAAAAFAAAAQAAAAAAAAABAAEAAAAAAAEAAQAAAAAAA+AEAAAAAAAD4AQAAAAAAAAgA
AAAAAAAAAwAAAAQAAAA4AgAAAAAAADgCQAAAAAAAOAJAAAAAAAAcAAAAAAAAABwAAAAAAAAAAQAA
AAAAAAABAAAABQAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAGTaAQAAAAAAZNoBAAAAAAAAACAA
AAAAAAEAAAAGAAAAAN4BAAAAAAAA3mEAAAAAAADeYQAAAAAAAAgAAAAAAABoFQAAAAAAAAAAIAAA
AAAAAgAAAAYAAAAY3gEAAAAAABjeYQAAAAAAGN5hAAAAAADgAQAAAAAAAOABAAAAAAAACAAAAAAA
AAAEAAAABAAAAFQCAAAAAAAAVAJAAAAAAABUAkAAAAAAAEQAAAAAAAAARAAAAAAAAAAEAAAAAAAA
AFDldGQEAAAA9KUBAAAAAAD0pUEAAAAAAPSlQQAAAAAABAgAAAAAAAAECAAAAAAAAAQAAAAAAAAA
Ue0ZAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAABS
5XRkBAAAAADeAQAAAAAAAN5hAAAAAAAA3mEAAAAAAAACAAAAAAAAAAIAAAAAAAABAAAAAAAAAC9s
Si no tenés base64 en alguno de los extremos pero tenés hexdump:
hexdump convierte a texto |
Mejor:
hexdump convierte a texto y se recorta con cut |
y despues hay que reconstruir eso, lo podés hacer con cualquier lenguaje. Creo recordar que hay un programa que sabe hacerlo pero en este momento te lo debo, cuando recuerde, actualizo. Si no, pondré algunos ejemplos.
No hay comentarios:
Publicar un comentario