El protocolo SSH (Secure Socket Shell) se utiliza ampliamente para conectarse a un servidor remoto o a una máquina conectada a una red. Permite intercambiar archivos y crear, modificar o ejecutar scripts en máquinas remotas.
SSH suele venir instalado de serie en las distribuciones de Linux o Windows.
Descripción del protocolo SSH
El protocolo SSH (Secure Shell) es un protocolo de comunicación criptográfica utilizado para establecer conexiones seguras y confidenciales entre dos sistemas informáticos a través de una red. Su principio se basa en la utilización de métodos de cifrado asimétricos y simétricos para proteger los datos que pasan entre sistemas. La autenticación de los usuarios se realiza generalmente mediante pares de claves criptográficas, compuestas por una clave pública y una clave privada, que garantizan la verificación segura de la identidad del usuario. La principal utilidad de SSH radica en su papel a la hora de proteger el acceso remoto a servidores, transferir archivos seguros y gestionar sistemas a distancia, ofreciendo una sólida protección frente a posibles amenazas, como los ataques de intermediario y la interceptación de datos sensibles.
Abrir una sesión SSH
Para conectarse a un dispositivo
ssh <host>@<serveur>
ejemplo para una raspberry pi
ssh pi@192.168.1.2
Una vez establecida la conexión, el monitor le pedirá la contraseña para acceder al terminal remoto.
Si su máquina remota lo permite, se puede utilizar la etiqueta -X para mostrar las ventanas en su máquina
ssh -X <host>@<serveur>
Copiar un archivo remoto utilizando el protocolo SSH
La commande à utiliser pour copier un fichier d’une machine distante à une autre est la commande scp
scp <source> <destination>
scp root@192.168.1.33:script.py C:\Users\ADMIN
Se solicitará una contraseña para validar la copia.
Iniciar sesión con una contraseña
En Linux, puede instalar y utilizar SSH
sudo apt-get install sshpass
sshpass -p {password} ssh {user}@{ipaddress}
En Windows, Putty puede encargarse de la gestión de contraseñas
Instale PuTTy y añada la carpeta ejecutable a la variable de entorno Path (C:³³ de programa³ PuTTy).
putty -ssh "root@192.168.1.32" -pw root #pour ouvrir une connexion en directe
Para enviar pedidos en directo, utilizamos plink
plink -ssh <username>@<host> -pw <password> <command>
Ejemplo
plink -ssh root@192.168.1.32 -pw root uname -a
Uso de Python para enviar comandos SSH
Utilizamos la biblioteca de subprocesos para ejecutar comandos de terminal
import subprocess subprocess.Popen(f"ssh {user}@{host} {cmd}", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
Envío de comandos SSH que requieren contraseña a través de Python
python3 -m pip install paramiko
ssh = paramiko.SSHClient() #ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #if missing ssh.connect(server, username=username, password=password) ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command("uname -a") print("connected via SSH") print(ssh_stdout.read().decode()) ssh.close()