Há uma diferença entre os dois comandos, conforme descrito em man cryptsetup
:
--key-file, -d name
Read the passphrase from file.If the name given is "-", then the passphrase will be read from stdin. In this case, reading will not stop at newline characters.
Isso significa que, se você gerou seu arquivo usando echo
, vi
ou copiar / colar, provavelmente incluirá uma nova linha no final. se usado como stdin puro (sem --key-file
option), ele terá sua nova linha final ignorada, mas quando usado como um parâmetro para --key-file
, mesmo que seja o mesmo stdin ( --key-file=-
) ele terá essa nova linha incluída a frase secreta: ela se torna uma nova senha que é inválida.
Para verificar isso:
cat mypass.txt | tr -d '\r\n' | sudo cryptsetup open --type luks --key-file=- /dev/sda1 enc-store
Deve funcionar como pretendido (apenas no caso de eu remover qualquer CR também).
Se essa for a causa, basta remover esta nova linha: por exemplo
mv -i mypass.txt mypass.old && tr -d '\r\n' < mypass.old > mypass.txt
O que você provavelmente deve fazer de qualquer maneira é gerar uma nova senha a partir de números aleatórios puros, colocá-la em um arquivo seguro e incluí-la em um slot LUKS separado.