Use aspas quando você faz eco da variável para o arquivo:
echo "$PRIVATE_KEY" > tmp.txt
Isso preservará as quebras de linha e o espaçamento.
Se eu atribuir uma variável no Bash da seguinte forma:
PRIVATE_KEY="$(< ~/.ssh/id_rsa)"
e, em seguida, despeje imediatamente para um arquivo:
echo $PRIVATE_KEY > tmp.txt
e, em seguida, compare isso com o original:
diff ~/.ssh/id_rsa tmp.txt
Eu não obtenho uma correspondência, já que todas as devoluções de carro (ou talvez feeds de linha) foram removidas na atribuição de variável original. Como evito isso?