Se a chave não contiver nenhuma nova linha, você pode simplesmente canalizá-la.
# cryptsetup luksFormat foobar.img originalkey
WARNING!
========
This will overwrite data on foobar.img irrevocably.
Are you sure? (Type uppercase yes): YES
# cryptsetup luksAddKey foobar.img newkey < originalkey
Infelizmente cryptsetup
tem vários modos de manipulação de arquivos de chave e trata de novas linhas e de forma tão diferente dependendo de qual modo ela está. Para chaves de caracteres especiais, a tubulação não funciona:
# cryptsetup luksAddKey foobar.img newkey < originalkey
No key available with this passphrase.
Nesse caso, você precisaria da opção keyfile:
# cryptsetup luksAddKey --key-file=originalkey foobar.img newkey
Ou se você ainda quiser canalizá-lo,
# cryptsetup luksAddKey --key-file=- foobar.img newkey < originalkey
Confuso, né? A ambigüidade pode ser evitada se você usar chaves que sejam apenas ASCII, com no máximo 512 caracteres, e que não contenham caracteres não imprimíveis, para que você também possa digitá-las manualmente em um piscar de olhos.
Se possível, você deve evitar coisas como --password=xyz
. Esta informação é pública, ela vaza suas senhas para a lista de processos, histórico de shell e possivelmente outros lugares. Sempre use canais ou arquivos com permissões de leitura restritas.