Use um shell não instalado na máquina remota

9

Dado o cenário:

  • Máquina remota : servidor SSH; o usuário não tem privilégios de administrador;
  • Máquina local : cliente SSH; O usuário tem privilégios de administrador.

Se o usuário , efetuando login no remoto do local , deseja interagir com o remoto usando um shell não instalado no remoto , como o usuário pode fazer isso sozinho?

Exemplo: o usuário usa o fish no local e deseja também usá-lo no controle remoto , mas o controle remoto só possui o bash e o zsh instalados.

sampablokuper
fonte
1
@mikeserv, obrigado. Não consigo entender o apelo ao voto negativo , que considero objetivamente clichê e excludista . Não tenho nenhum problema com as alterações de tag, mas faço exceção da minha pergunta ser reformatada de uma maneira que reduza a clareza. Eu não uso bate-papo, então não posso discutir isso lá.
Sampablokuper 17/08/2014
abuso de negrito é difícil de ler . E frases faltando muitas palavras.
Gilles 'SO- stop be evil'
2
@sampablokuper você usou negrito para enfatizar o ponto que é difícil de ler; além disso, você está se aproximando quando tudo é enfatizado, nada é.
derobert
1
@ Gilles, nenhuma das frases da minha pergunta também está faltando palavras.
Sampablokuper
1
@derobert para classificação (e, portanto, clareza), da mesma forma que muitos livros didáticos de computação. Existem três sistemas interagindo na minha pergunta, e seus nomes (ou, se preferir, referências a eles) estão em negrito. Nada mais está em negrito. Antes que alguém pergunte (quero dizer, sério! Já estou sendo solicitado a justificar opções de formatação perfeitamente compreensíveis!), Sim, um dos sistemas é humano e os outros dois não são humanos. E Gilles, obrigado, mas não, eu não pretendia usar a formatação de código. Prefiro usar a formatação de código apenas para comandos ou código, nenhum dos quais está presente na minha pergunta.
Sampablokuper

Respostas:

6

Instale seu shell favorito na máquina remota. Você não precisa de privilégios de administrador para fazer isso, você pode instalar programas em seu diretório pessoal, é apenas menos conveniente. Veja Instalação no debian 5 de 32 bits sem ser root . Como instalar um programa localmente sem privilégios de sudo? , Mantendo o controle de programas e outras perguntas .

Se você deseja efetuar login automaticamente em um shell que você instalou em vez do padrão, consulte Tornando o shell padrão do zsh sem acesso root

Se tudo o que você deseja fazer é manipular arquivos remotos, você pode usar o SSHFS para montar a árvore de diretórios remotos na sua máquina local.

mkdir ~/remote.d
sshfs remote.example.com:/ ~/remote.d
ls ~/remote.d/

fusermount -u ~/remote.d

Se você não tem espaço no diretório inicial ou é uma conta compartilhada, pode se contentar em configurar um túnel SSH reverso e montar sua árvore de diretórios local na máquina remota com SSHFS , supondo que as duas máquinas estejam executando a mesma arquitetura ( mesma variante unix no mesmo tipo de processador). Se as duas máquinas tiverem arquiteturas incompatíveis, você poderá instalar os programas para a arquitetura remota no diretório inicial local. Isso pode não ser muito conveniente, pois você precisará configurar os caminhos corretamente para que os programas encontrem suas bibliotecas, arquivos de configuração e outros arquivos de dados.

O eshell do Emacs é compatível com o Tramp : se você mudar para um diretório remoto no Eshell, estará executando comandos na máquina remota.

Gilles 'SO- parar de ser mau'
fonte
3

Resposta simples: Não, você não pode usar em uma caixa remota um programa que não está instalado na caixa remota.

Solução alternativa: você não precisa de privilégios de administrador para instalar um shell no sistema remoto. Você pode instalá-lo em seu diretório pessoal, mas provavelmente precisará compilá-lo a partir das fontes. Normalmente, usando algo comoconfigure --prefix=${HOME}/local

Última nota: você não pode alterar seu shell padrão para um não oficial (veja /etc/shells), mas pode colocar algo como exec fishem seu.bashrc

andcoz
fonte
2

O usuário pode usar sshfs para montar seu $ HOME remoto em sua máquina local. Nesse cenário, o usuário não usaria seu shell de escolha diretamente na máquina remota, mas, ainda assim, melhor que nada.

Arkadiusz Drabczyk
fonte
2

A abordagem básica é copiar o executável do shell para o host remoto usando, em scpseguida, executá-lo usando ssh, por exemplo,

scp /usr/bin/fish remote:fish && ssh -t remote '~/fish'

O -té necessário para que sshaloque um tty, o que não faria por padrão ao executar um comando remoto.

Isso pressupõe que seu host remoto esteja executando o mesmo sistema operacional. Caso contrário, você deseja descobrir o sistema operacional remoto e compilar um binário (possivelmente estático) que você pode copiar.

Mikel
fonte
2

A resposta óbvia, "instale o comando na máquina remota", é a solução mais limpa, portanto, não devemos ignorá-la:

Se for possível instalar o comando como root, por exemplo
sudo apt-get install fish, com ,
o comando poderá ser executado assim:

ssh remote -t fish


A questão é sobre o que fazer quando não podemos instalar um comando no computador remoto.
Ou, mais especificamente, é sobre o caso em que não podemos instalar um comando como root .
Isso não significa que não podemos instalar!

O que ainda é possível é instalar o comando dentro do diretório inicial , construindo-o a partir da fonte .

Isso tem a vantagem de cuidar de todos os arquivos de suporte associados que podem vir com um comando e de como o programa os encontra. No fishexemplo do shell, essas são as funções de conclusão, etc, todas não disponíveis se apenas copiarmos o fishbinário.

A criação de um comando a partir da fonte precisa de ferramentas de desenvolvimento e arquivos de desenvolvimento das bibliotecas usadas, o que pode ser muito complicado.

Mas muitos programas vêm com tudo o que precisam em conjunto nas fontes, portanto pode ser fácil. Difícil dizer antes, mas pode-se apenas tentar.

Para instalar um comando no diretório inicial, configureé fornecido o caminho para instalação - que precisa ser verificado nas instruções de construção. Por exemplo:

mkdir ~/local
./configure --prefix=~/local 
make
make install

Observe que não sudo make installé o habitual - pois é o ponto principal de instalá-lo localmente para não precisar do sudo aqui.

Para obter informações gerais sobre a instalação de programas a partir da fonte, consulte askubuntu.SE: Como instalo um arquivo .tar.gz (ou .tar.bz2)?

Volker Siegel
fonte
0

Eu não acho que você pode executar um shell que está em uma máquina em outra. A única maneira de executá-lo na máquina remota é instalá-lo.

env_explosion
fonte