TL; DR : a resposta da int_ua é o caminho a seguir, mais simples e sem esforço.
Por que isso funciona da maneira como funciona
Isso volta ao comportamento básico de qualquer shell. Quando você faz login como ssh [email protected] , você obtém a versão interativa do shell. Quando você executa ssh [email protected] -t "command1;command2" , basicamente obtém /bin/sh -c 'command1;command2' . O primeiro permite executar o que você colocar no stdin enquanto obtém os arquivos de pontos, enquanto o segundo apenas executa esses comandos e saídas. Essencialmente, não há como executar um comando antes do uso interativo (a menos que esteja em um dos arquivos de ponto) ou obter um shell interativo do comando single-shot sh -c (ou qualquer shell que seja, não necessariamente sh ).
Idéias com falha ou incompletas
Minha primeira idéia que tive é a seguinte: se o shell usa o local do servidor .bashrc , alguém poderia usar o arquivo local do cliente no servidor? Bem, não . Não, a menos que você copie o arquivo de pontos para o servidor remoto com scp ou rsync.
A segunda ideia que eu tive é a PROMPT_COMMAND . Esta% nice bash variável executa o comando toda vez antes de mostrar seu prompt PS1 , então por que não definir essa variável antes de gerar bash to PROMPT_COMMAND="who; unset PROMPT_COMMAND" para que seja executada como single-shot?
O problema é que essa variável precisa ser exportada para o servidor remoto, e resposta do Gilles me ajudou a fazer algo parecido com isso :
ssh -o SendEnv=PS1 ssh localhost -t bash
ou
ssh localhost -t " PROMPT_COMMAND='who; unset PROMPT_COMMAND' bash "
Problema? -o opção SendEnv deve permitir que a variável específica que você está tentando enviar em /etc/ssh/sshd_config , e, além disso, em qualquer caso, você ainda pode executar todas essas coisas com /bin/sh -c
Melhoria ligeira da resposta da int_ua
Então, agora, podemos ver que o padrão ssh user@server -t 'command1;shell' funciona melhor. Exceto por haver um pequeno detalhe: /bin/sh -c process ainda está lá, então por que não executar bash com exec para substituir esse processo?
ssh [email protected] -t 'who;exec bash'