Tengo un dispositivo Linux que realizará llamadas periódicas a un servidor API, por ejemplo, cada vez que se inicia el sistema. Cada vez, entonces debería autenticarse y luego hacer lo suyo.
Puedo almacenar el nombre de usuario / contraseña en un archivo .config
o crear una clave pública id_rsa.pub
SSH.
Mi pregunta es la siguiente: ¿Por qué se considera mejor la autorización SSH? Quiero decir que si alguien tiene acceso a mi máquina linux, entonces pueden leer el nombre de usuario / contraseña O la clave SSH y luego pueden copiar esta información en su propia computadora portátil.
¿Me estoy perdiendo algo aquí? Nota Todos estos nombres de usuario / contraseñas son generados por mí y serán cadenas aleatorias de 256 bits. Por lo tanto, el razonamiento típico de las personas que utilizan contraseñas débiles y predecibles no se aplica aquí.
Actualizar
¿Qué te parece el siguiente enfoque?
Tienes un número semilla, que será un md5
de algo. Este valor se almacena en el servidor y en cada máquina.
Ahora, durante la autenticación, un cliente enviará dos cadenas,
str1 = md5(timestamp + random());
str2 = md5(str1 + seed);
El servidor recibirá estos dos números y, en consecuencia, volverá a calcular str2
de str1
. Si str2_from_server == str2
, entonces se genera un token y se devuelve. Este token caducará con un uso o después de un período de tiempo.
Los tokens se guardarán en un par de clave / valor de tabla de str1 str2 token
y nunca podrán volver a usarse (de manera realista, esta tabla se borrará de vez en cuando para que no crezca infinitamente).
¿Es esto superior / inferior a SSH?