[Remoto] Conexión por ssh mediante MAC en la LAN

Se trata de conectarnos por ssh a un equipo conociendo su MAC. Como ssh necesita el parámetro de la dirección del equipo y no su MAC, he creado un script, siempre mejorable, para realizar esta función. Se ha probado en Debian 11 y 12.

Fichero que contiene las direcciones MAC de los equipos del aula.

1301 04:92:26:d3:aa:f8
1302 64:51:06:60:0e:35
1303 4c:ed:fb:3f:0d:e6
1304 64:51:06:60:0e:3e
1305 04:92:26:c1:f3:c0
1306 64:51:06:51:07:c3
1307 e0:d5:5e:46:89:c5
1308 64:51:06:50:f5:ae
1309 04:92:26:c1:f3:b9
1310 64:51:06:50:f0:eb
1311 4c:ed:fb:3f:0f:67
1312 64:51:06:60:0e:3c
1313 04:92:26:d3:b1:d0
1314 64:51:06:5b:af:0d
1315 4c:ed:fb:3f:0f:01
1316 e0:d5:5e:46:8d:67
1317 4c:ed:fb:3f:0f:9a
1318 64:51:06:52:27:55
1319 e0:d5:5e:46:8d:33
1320 64:51:06:57:fb:ae
1321 e0:d5:5e:46:8d:6b
1322 64:51:06:52:40:65
1323 00:24:1d:c0:6a:6b
1324 00:18:8b:2b:24:00

Script para conectar con un equipo del taller mediante ssh utilizando su MAC. Se usa el paquete arp-scan, previamente instalado, y debe ejecutarse con permisos de root. Instalar previamente arp-scan

# aptitude install arp-scan

# Variables de entrada
# - $1 el número del pc (1301..1324), debe tener 4 caracteres
# - $2 es la letra del usuario (a,b,c)
# ejemplo de llamada: # bash conecta.sh 1301 c
clear
# Nombre del hostname y red
pc_num=$1
# comprobamos longitud de la cadena de entrada
if [[ ${#pc_num} -ne 4 ]]; then
echo Identificador del PC incorrecto: Debe contener 4 caracteres
exit
fi
pc_nombre=pc$pc_num
pc_red="192.168.113.0/24"
# Buscar en archivo la mac del equipo, segundo campo de cada línea
archivo="mac13.txt"
pc_mac=$(grep $1 $archivo | awk '{print $2}')
if [[ -z "$pc_mac" ]]; then
echo "Identificador del PC no encontrado"
exit
fi
# Busqueda de la IP de ese equipo
echo Buscando en la red $pc_red la IP del equipo $pc_nombre con MAC $pc_mac...
pc_ip=$(arp-scan $pc_red | grep $pc_mac | awk '{print $1}' | head -n1)
if [[ -z "$pc_ip" ]]; then
echo "PC no encontrado"
exit
fi
# IP identificada, entrar por ssh en usuario...
echo La IP del equipo $pc_nombre es $pc_ip
echo Conectandose con usuario sti$1$2...
ssh sti$1$2@$pc_ip

Se llama con

# bash conecta.sh XXXX Y

donde XXXX es el número que identifica el equipo: el primer campo de cada fila del fichero de texto que contienen las MAC. e Y es la letra del usuario a, b o c. Ejemplo:

# bash conecta.sh 1301 a

Copia de un fichero mediante ssh

Para copiar un fichero de un equipo a otro en Debian Linux utilizando la consola SSH, puedes usar el comando SCP (Secure Copy Protocol). SCP es una herramienta de línea de comandos que permite la transferencia segura de archivos entre sistemas locales y remotos utilizando el protocolo SSH.

La sintaxis básica para copiar un archivo de un equipo a otro es la siguiente:

scp [opciones] archivo_origen usuario@servidor_destino:/ruta/destino

Por ejemplo:

scp vbox_install_71.sh sti1301a@192.168.113.101:/home/sti1301a/

En este ejemplo:

documento.txt es la ruta del archivo en el equipo de origen.

sti1301a es el nombre de usuario en el equipo de destino.

192.168.113.101 es la dirección IP del equipo de destino.

/home/sti1301a/ es la ruta de destino en el equipo remoto.

Al ejecutar ese comando, se pedirá la contraseña del usuario remoto para autenticar la conexión SSH.

Opciones útiles del comando SCP. Para mejorar la funcionalidad del comando SCP, puedes utilizar algunas opciones:

-r: Copia directorios de manera recursiva. Útil para transferir carpetas completas.

-P: Especifica un puerto SSH diferente al predeterminado 22.

-C: Habilita la compresión de datos para acelerar la transferencia en conexiones lentas.

-v: Proporciona información detallada sobre el proceso de transferencia.

-l: Limita la velocidad de transferencia en kilobits por segundo.

Ejemplo para copiar un directorio completo de forma recursiva

scp -r /directorio/local usuario_remoto@192.168.1.100:/directorio/remoto

Recomendaciones

Si trabajas frecuentemente con el mismo servidor remoto, considera configurar claves SSH para evitar ingresar la contraseña en cada transferencia.

Para transferencias de archivos grandes, usa la opción `-l` para limitar el ancho de banda y evitar saturar la red.

Si necesitas copiar archivos entre dos servidores remotos, puedes ejecutar el comando SCP desde uno de los servidores involucrados.

Asegúrate de tener los permisos necesarios tanto en el equipo de origen como en el de destino para realizar la transferencia.

Utilizando el comando SCP, podrás transferir archivos de manera segura y eficiente entre equipos Debian Linux a través de SSH, aprovechando la robustez y seguridad que ofrece este protocolo.

https://www.arsys.es/blog/utilizar-comando-scp https://certidevs.com/tutorial-bash-shell-transferencia-de-archivos-y-comunicacion-remota-con-ssh https://geekytheory.com/copiar-archivos-a-traves-de-ssh-con-scp/ https://www.hostgator.mx/blog/comando-scp-linux/ https://alexhost.com/es/faq/copiar-archivos-a-traves-de-ssh/ https://www.godaddy.com/resources/latam/digitalizacion/scp-transferir-archivos-servidores https://www.youtube.com/watch?v=htFkBUQCGt8 https://www.youtube.com/watch?v=WoZgRY1PWH8 https://www.ionos.es/digitalguide/servidores/configuracion/scp-de-linux/ https://www.swhosting.com/es/blog/como-transferir-archivos-entre-servidores-utilizando-ssh https://www.siteground.es/tutoriales/ssh/mover-copiar-archivos/ https://go.lightnode.com/es/tech/scp-linux https://www.hostinger.es/tutoriales/comando-scp https://dinahosting.com/ayuda/transferir-ficheros-usando-scp/ https://desarrolloweb.com/articulos/transferir-archivos-scp-ssh.html https://serverspace.io/es/support/help/how-to-use-scp-utility-command-to-securely-transfer-files/ https://www.ionos.es/digitalguide/servidores/configuracion/comando-cp-de-linux/ https://www.servidoresadmin.com/linux-scp-comando-linux-scp-para-transferir-ficheros/ https://support.hostinger.com/es/articles/4725353-como-copiar-archivos-o-carpetas-usando-ssh https://serverspace.io/es/support/help/copy-files-and-run-commands-through-ssh/