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

8

Dado o cenário:

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

Se o usuário fizer login no remoto de local , deseja interagir com remoto usando um shell não instalado em remote , como o usuário pode realizar isso sozinho?

Exemplo: usuário usa peixe em local , e deseja também usá-lo em remote , mas remote só tem bash e zsh instalado.

    
por sampablokuper 17.08.2014 / 00:39

6 respostas

6

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

Se você quiser logar automaticamente em um shell que você mesmo instalou em vez do padrão, veja Fazendo shell padrão 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 em seu computador. 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 seu diretório pessoal ou é uma conta compartilhada, pode se contentar com a configuração de um túnel SSH reverso e monte sua árvore de diretório local na máquina remota com SSHFS , assumindo que as duas máquinas estão executando a mesma arquitetura (mesma variante unix no mesmo tipo de processador). Se as duas máquinas tiverem arquiteturas incompatíveis, você poderá até instalar os programas para a arquitetura remota em seu diretório local. Isso pode não ser muito conveniente, pois você terá que configurar caminhos corretamente para os programas encontrarem suas bibliotecas, arquivos de configuração e outros arquivos de dados.

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

    
por 17.08.2014 / 01:47
3

Resposta simples: Não, você não pode usar em uma caixa remota um programa que não esteja 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 terá que compilá-lo a partir das fontes. Normalmente, usando algo como configure --prefix=${HOME}/local

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

    
por 17.08.2014 / 01:22
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 diretamente o shell de sua escolha na máquina remota, mas, ainda assim, melhor que nada.

    
por 17.08.2014 / 01:21
2

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

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

O -t é necessário para que ssh aloque 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 pode ser copiado.

    
por 17.08.2014 / 01:36
2

A resposta óbvia, "instalar o comando na máquina remota", é a solução mais limpa, por isso não devemos ignorá-lo:

Se isso for possível, instale o comando como root, por exemplo, com% sudo apt-get install fish ,
 o comando pode ser executado assim:

ssh remote -t fish


A questão é sobre o que fazer quando não é possível instalar um comando no computador remoto.
Ou mais específico, é sobre o caso nós não podemos instalar um comando como root .
Isso não significa que não podemos instalar nada!

O que ainda é possível é instalar o comando dentro do diretório home 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 como o programa os encontra. No exemplo fish shell, estas são as funções de conclusão etc, todas não disponíveis se apenas copiarmos o fish binário.

A criação de um comando a partir do código-fonte requer 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 agrupados nas fontes, por isso pode ser fácil. Difícil dizer antes, mas pode-se apenas tentar.

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

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

Note que não é sudo make install como de costume - como é o ponto inteiro de instalá-lo localmente para não precisar de sudo aqui.

Para informações gerais sobre como instalar programas a partir do código fonte, veja askubuntu.SE: Como eu instalo um arquivo .tar.gz (ou .tar.bz2)?

    
por 17.08.2014 / 02:10
0

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

    
por 17.08.2014 / 01:16