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

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

Regularmente tenho que fazer logon em hosts remotos via SSH e gosto de usar a opção bash set -o vie normalmente preciso fazer isso cdem 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 neles e salvá-los em .bash_profile/ .bashrc. Então, eu estava pensando em como posso fazer isso ao me conectar via SSH, para não precisar digitar os mesmos comandos sempre que me conectar a um servidor remoto. Eu tentei várias maneiras de conseguir isso, mas nenhuma delas parece funcionar. Alguém pode me ajudar a acertar esse comando? Em poucas palavras, é isso que quero fazer.

  1. cdpara um diretório específico
  2. definir a opção bashset -o vi

Veja como tentei fazer isso:

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

Sinto que isso realmente funciona, mas a sessão SSH termina porque, uma vez set -o viexecutado o comando, a sessão é desconectada com uma mensagem como:

Conexão compartilhada com remotehost.com fechada.

Existe uma maneira de manter a sessão aberta após executar esses comandos ou existe outra maneira de conseguir o que desejo?

Responder1

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... como -oé uma opção padrão do shutilitário POSIX e vié uma das opções padrão. Essa linha de comando também é compatível com shells de todas as principais famílias de shell, incluindo Bourne, csh, rc, fish então devem funcionar independentemente do shell de login do usuário root ali)

Ou:

ssh-t[e-mail protegido]'cd /data && exec env SHELLOPTS=vi bash --login'

Na verdade, você não quer usar esse segundo. Isso significa que a $SHELLOPTSvariável estará no ambiente e afetará todas bashas invocações (e as não interativas herdarão as dos shells interativos, causando todo tipo de problemas).

Tenha também em atenção que bashtem dois conjuntos de opções, um que você define com -o/ $SHELLOPTSe outro que você define com -O/ $BASHOPTS).

Responder2

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 backup do arquivo .bashrc.

Responder3

Para simplificar o salto de uma pasta para outra em seu host, você pode instalar o apparix e configurar marcadores nos diferentes locais onde você precisa pular e, em seguida, usar to folderXno apparix:https://micans.org/apparix/man/apparix.html

Responder4

Estou usando um sistema remoto com um ID de usuário compartilhado, por isso não quero editar os arquivos de inicialização, pois isso afetaria todos os outros também. Sua postagem aqui me mostrou como definir a viopção que eu queria. Aqui está o que coloquei no meu ~/.ssh/configarquivo

Host testsystem
User tester
RequestTTY yes
RemoteCommand exec /bin/bash --login -o vi

o que é notavelmente simples. Não sei sobre a parte do "cd" que você deseja.

informação relacionada