Como posso alterar diretórios e definir opções bash ao fazer login em um servidor remoto via ssh

1

Eu regularmente tenho que fazer logon em hosts remotos via SSH e eu gosto de usar a opção bash set -o vi e eu normalmente tenho que cd para um diretório específico. Como esses hosts são efêmeros (eles são criados e destruídos regularmente), não consigo fazer logon e salvá-los em .bash_profile / .bashrc . Então eu estava procurando como eu posso fazer isso quando eu conecto via SSH, então eu não tenho que digitar os mesmos comandos toda vez que eu me conecto a um servidor remoto. Eu tentei várias maneiras de conseguir isso, mas nenhuma delas parece funcionar. Alguém pode me ajudar a conseguir esse comando certo? Em suma, é isso que eu quero fazer.

  1. cd para um diretório específico
  2. definir a opção de bash set -o vi

Veja como eu tentei fazer isso:

ssh [email protected] -t "cd /data; exec bash --login -c \"set -o vi\""

Eu sinto que isso realmente funciona, mas que a sessão SSH termina porque uma vez que o comando set -o vi é executado, a sessão se desconecta com uma mensagem como:

Shared connection to remotehost.com closed.

Existe uma maneira de manter a sessão aberta após a execução desses comandos ou existe outra maneira de alcançar o que eu quero?

    
por conorgriffin 30.11.2017 / 12:17

3 respostas

4

Algumas opções:

ssh -t [email protected] 'cd /data && exec bash --login -o vi'

(que funciona com todos os shells do tipo POSIX incluindo ksh / zsh / dash ... pois -o é uma opção padrão do utilitário sh POSIX e vi é um Essa linha de comando também é compatível com shells de todas as principais famílias de shell, incluindo Bourne, csh, rc, fish, portanto, deve funcionar independentemente do shell de login do usuário root de lá)

Ou:

ssh -t [email protected] 'cd /data && exec env SHELLOPTS=vi bash --login'

Na verdade, você não quer usar o segundo. Isso significa que a variável $SHELLOPTS estará no ambiente e afetará todas as invocações de bash (e as não interativas herdarão as de invólucros interativos causando todos os tipos de problemas).

Tenha também em atenção que bash tem dois conjuntos de opções, um que você define com -o / $SHELLOPTS e um que definiu com -O / $BASHOPTS ).

    
por 30.11.2017 / 13:08
1

Faça dois comandos.

  1. Coloque os comandos a serem executados no host remoto em um arquivo .bashrc.tmp .
  2. $ scp .bashrc.tmp [email protected]:
  3. $ ssh <options> [email protected] "bash --login --rcfile ${HOME}/.bashrc.tmp"

Dessa forma, você nem precisa fazer o backup do seu original .bashrc .

    
por 30.11.2017 / 13:12
1

Para simplificar o salto de uma pasta para outra no seu host, você pode instalar o apparix e configurar marcadores nos diferentes lugares que você precisa pular, então use to folderX no apparix: link

    
por 30.11.2017 / 23:20

Tags