Você precisa definir DEBIAN_FRONTEND=noninteractive . Eu pareço lembrar que foi um pouco difícil de encontrar, já que na verdade é uma opção para debconf , não apt-get . No entanto, é mencionado, por exemplo, aqui e, claro, no manual de debconf .
Então, faça um script que contenha
#/bin/sh
DEBIAN_FRONTEND=noninteractive apt-get upgrade -q -y
e execute isso do cron. E lembre-se de executar apt-get update também.
É claro que você deve usar unattended-upgrades ou algo especialmente projetado para isso.
Mas eu tenho uma máquina Debian usando esse script e funciona bem:
#/bin/sh
apt-get -q -q update
if apt-get -s upgrade | grep -q "0 upgraded" ; then
true
else
DEBIAN_FRONTEND=noninteractive apt-get -y -q upgrade
fi
O primeiro apt-get -s está lá para suprimir a saída e o e-mail inútil, caso não haja nada para atualizar.
Similar pergunta em askubuntu.