Por que seu script fecha o soquete
Sempre que um script expect atinge o final do arquivo, ele fecha todos os processos gerados e sai. Em outras palavras, está se comportando da maneira atual.
Mantendo o soquete aberto para interação
O que está faltando é usar o comando interagir quando você vê um prompt de comando. Por exemplo, depois de enviar sua senha:
expect {\$\s*} { interact }
Em seu caso de uso particular, você poderia simplesmente chamar interagir imediatamente após enviar sua senha sem esperar pelo prompt, mas o exemplo acima é geralmente uma prática melhor que permite lidar com outros tipos de situações se você optar por fazê-lo.
O Interact permitirá que você faça o que quiser: para interagir com a sessão SSH. Isso continuará até você fechar a conexão e o processo gerado sair.