ssh com comando… mais a concha
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!
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"