ssh -t e ssh terras em diretório diferente

0

Eu desejo ssh em um servidor remoto e executar uma série de comandos como (apenas alguns comandos aleatórios)

touch foo.txt
echo 'bar' > foo.txt
cd ..
ls

e permaneça nessa conexão.

Alguém me sugeriu usar ssh -t $server "commands; bash" . Funcionou, mas me colocou em um diretório diferente do que se eu fizesse ssh $server . Alguma idéia de por que isso acontece?

(Estou estudando código existente em um repositório, por isso pergunto-me qual é o mecanismo que faz isso acontecer e por quê)

    
por Kevin He 20.09.2018 / 02:24

1 resposta

0

Any ideas why this happens?

Talvez seu commands inclua cd . Você está executando commands; bash , então bash inicia em qualquer diretório commands end.

A solução óbvia é cd antes de você invocar bash . Experimente

ssh -t $server 'commands; cd "$HOME"; exec bash -l'

Notas:

  • As aspas simples impedem a expansão de $HOME localmente. Caso você precise de commands para incluir variáveis expandidas localmente, misture as aspas (por exemplo, "commands with $var; "'cd "$HOME"; exec bash -l' ).
  • exec , porque você não precisa mais do shell pai no lado remoto (ou não?).
  • -l (equivalente a --login ) porque o único ssh $server gera um shell de login e você quer que o comando inteiro aja da mesma forma. Bash como um shell de login origina arquivos diferentes do shell de não-login, começando com /etc/profile ; as regras são um pouco complicadas, veja man 1 bash , procure por INVOCATION . Se um desses arquivos executar cd em outro diretório, você obterá o que obtém mesmo se commands não alterar o diretório. Você não disse quais são os diretórios ("certo" e "errado"), então é difícil até mesmo adivinhar qual o objetivo desse "oculto" cd .

Ou você pode executar commands em um subshell. Isso não afetará o diretório de trabalho do shell pai, então bash será iniciado sempre que o shell pai for iniciado:

ssh -t $server '(commands); exec bash -l'

Você pode preferir uma solução ou outra dependendo de qual commands . Por exemplo, se commands modificar o ambiente de seu shell no lado remoto, executá-los em um subshell ou não fará diferença para o% finalbash.

    
por 20.09.2018 / 02:31

Tags