Parece que systemd-ask-password
faz a maior parte do que você deseja, exceto pela expiração da chave, que é codificado em 2,5 minutos como você descobriu:
#define KEYRING_TIMEOUT_USEC ((5 * USEC_PER_MINUTE) / 2)
Uma opção é criar seu próprio programa ask-password, que o armazena no chaveiro do kernel por um período de tempo maior (ou talvez indefinidamente). Você pode até mesmo usar systemd-ask-password
como ponto de partida para ele. Você poderia chamar tal agente do ExecStartPre=
em sua unidade. (Claro que, uma opção possível é até mesmo apenas construí-lo em seu próprio programa principal, já que ele vai acessar o chaveiro para buscar a senha, ele poderia perguntar naquele ponto se não for encontrado.)
Outra opção seria propor uma modificação para systemd-ask-password
no próprio sistema upstream, mantendo a expiração de 2.5 minutos por padrão, mas introduzindo um argumento de linha de comando adicional para permitir ajustes no tempo de expiração, o que o tornaria utilizável para o seu caso de uso específico.