Quando você faz:
ssh serva -t "source ~/.bashrc"
ssh diz a sshd para invocar o shell de login do usuário remoto como:
the-shell -c 'source ~/.bashrc'
Isso diz ao shell para executar esse comando e sair.
Provavelmente, o que você deseja é executar um shell interativo e ter esse shell interativo para executar o comando source ~/.bashrc e depois para emitir um prompt e ler mais comandos para executar de você.
Primeiro, observe que, no caso de source ~/.bashrc , isso não é necessário, pois bash já origina seu ~/.bashrc quando interativo (na verdade, acima de ssh , até quando não é interativo). Então:
ssh serva
É o suficiente.
Agora, se você quiser executar um comando e, em seguida, um shell interativo, faça o seguinte:
ssh -t serva 'cmd; bash'
(lá, o -t é necessário porque ssh não inicia um pseudo-terminal por padrão quando passou um comando para executar)
cmd não seria executado por esse bash (seria executado pelo shell (seu shell de login) iniciado por sshd para interpretar esse cmd; bash
linha de comando).
Se você queria que o bash interativo executasse esse comando. Um truque é usar a variável bash do PROMPT_COMMAND . bash interpreta o conteúdo dessa variável como código shell a ser executado antes de cada prompt. Então você pode fazer:
ssh -t serva 'PROMPT_COMMAND="cmd; unset PROMPT_COMMAND" bash'