Pergunta

Eu gostaria de um comando que ssh'es em uma máquina, execute um comando (cd ou execute um script ou su) e depois me dá o shell. Passar um comando para SSH parece sempre sair.

Alguns exemplos do que estou procurando: 'SSH me@Machine1 "./ExecutemyScript && CD /DevelopmentDirectory"' e depois me devolve minha concha.

Os motivos pelos quais quero fazer isso é porque estou usando o MRXVT (Termos X Termos), o que me permite definir comandos para todas as minhas guias para executar na inicialização. Eu gostaria de ter algumas conexões SSH com a mesma máquina, mas fazê -las fazer coisas diferentes após o sshing.

-Roubar

Obrigado!

Foi útil?

Solução

Variação nas outras respostas realmente, use a opção -t da SSH para forçar a alocação pseudo -tty:

ssh -t me@machine ./executeMyScript '&&' bash -i

Outras dicas

Que tal

    ssh me@machine ./executeMyScript '&&' bash -i

Você tem que citar o && Portanto, será transmitido para a máquina remota em vez de engolir o shell local.

Citação a ';' Personagem e você também pode alterar seu diretório inicial:

    ssh me@machine ./executeMyScript '&&' cd /developmentDirectory ';' bash -i

Coloque algo assim no final do script que você deseja executar:

bash -li

Isso começa a bater como um shell de login interativo. Não é perfeito, já que você estará perdendo coisas como TERM encaminhamento, mas pode ser adequado às suas necessidades.

Se não for suficiente, eu apenas faria duas chamadas SSH separadas, uma para executar o script e outro para me fazer login.

Que tal usar a opção SendEnv em ssh_config para enviar uma opção de ambiente específica da sua máquina local para a máquina remota seguida pela verificação dessa variável de ambiente na configuração do host remoto?

Em seu arquivo .ssh/special-config:

remotehost:
    SendEnv *

Seu script local:

RUN_THIS_FIRST_COMMAND=blah
ssh -F special-config-file

Seu remoto .bash_profile:

if [ "$RUN_THIS_FIRST_COMMAND" != "" ] ; then
    $RUN_THIS_FIRST_COMMAND
fi

Você pode precisar verificar algumas dessas linhas, eu apenas joguei isso nas páginas do homem e nunca tentei nada disso antes. Pessoalmente, não gosto de ter que modificar meu ambiente local e remoto para esta solução.

Isso funciona para mim.

/usr/bin/ssh -t yourdomain.com "cd /directory; bash -i"
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top