Executar um comando no computador local a partir de um host SSH remoto conectado?

10

Digamos que eu tenha conectado a um computador remoto via SSH. De um programa neste computador remoto, eu preciso executar um comando no meu computador local (o iniciador de conexão).

O que levanta a questão: é possível investigar a conexão existente entre os dois computadores para executar um comando no computador local?

Eu considerei executar o comando ssh user@host-of-connecting-party <command> no computador remoto para estabelecer uma conexão reversa. Mas isso é mais difícil de automatizar e exigirá intervenção do usuário. Eu esperava poder automatizá-lo totalmente, ou pelo menos detectar o nome do usuário / host do usuário conectado.

    
por Aeyoun 24.08.2012 / 00:51

6 respostas

4

Estou tendo uma necessidade semelhante às vezes, desde que eu conecte o Putty ao nosso servidor VPN e de lá pelo ssh para algum outro host, o que não é acessível para mim diretamente devido à configuração da VPN.

Às vezes, preciso apenas verificar rapidamente algo em uma máquina servidor VPN, enquanto ainda estou executando minha "sessão ssh". Uma abordagem é executar uma sessão ssh em screen , que, como já notei, adiciona algum atraso em comparação com o "ssh regular". Outra abordagem, que gostaria de compartilhar aqui, é a seguinte:

Enquanto estiver na sessão SSH, pressione Enter , então ~ , (certifique-se de que não está sendo exibido, ou seja, você está no modo de comando), então Ctrl - Z . Isso colocará o processo do cliente ssh em um "host" como plano de fundo, e você terá algo como:

[root@client170 ~]# ~^Z [suspend ssh]

[1]+  Stopped                 ssh [email protected]
[root@vps291736 ~]#

Agora você está no "host", pode fazer o que quiser (embora, eu não tenho certeza de quanto tempo a sessão do ssh será mantida viva), e então retornar para a sessão SSH executando fg .

Pelo menos, isso funciona para mim enquanto estou conectado de uma estação de trabalho Win10 via Putty em uma VM baseada em CentOS e dessa VM conectada por SSH a outro host.

Espero que ajude alguém!

    
por 62mkv 18.11.2016 / 05:28
2

A resposta do @ 62mkv é uma solução muito melhor. Use isso.

Para completar e curiosidade, se você tiver um servidor ssh rodando em sua máquina local, você pode criar um túnel ssh para permitir conexões ssh do host remoto na porta 20202 de volta para o local na porta 22. Exemplo de comando:

ssh -R20202:localhost:22 [email protected]

Isso iniciará uma conexão ssh, mas também configurará um encapsulamento de volta para o servidor ssh em execução na sua máquina. Então você pode fazer isso, quando ssh'ed no host remoto:

ssh -p 20202 localuser@localhost

Claro, isso pode ficar confuso rapidamente - especialmente se a técnica for aninhada mais de uma vez. Ele adiciona um pouco de latência também - já que tudo que você executa em sua máquina local é retornado através do host remoto.

Informações adicionais sobre tunelamento ssh para aqueles cuja curiosidade ainda não foi satisfeita podem ser encontradas em resposta a esta pergunta unix stackexchange .

    
por starbeamrainbowlabs 10.05.2017 / 23:01
0

Se o seu computador local e remoto puderem ser acessados pela Internet, basta abrir uma sessão SSH no computador local no computador remoto e, nessa sessão, abrir outra sessão ssh no computador remoto no computador local:

localuser@local> ssh remoteuser@remote
Password:
remoteuser@remote> hostname
remote
remoteuser@remote> ssh localuser@local
Password:
localuser@local> hostname
local
localuser@local> exit
remoteuser@remote> exit
localuser@local>

Para automatizar o material, dê uma olhada em Fabric (é necessário ter conhecimento sobre Python)

from fabric.api import *

@hosts('host1')
def clean_and_upload():
    local('find assets/ -name "*.DS_Store" -exec rm '{}' \;')
    local('tar czf /tmp/assets.tgz assets/')
    put('/tmp/assets.tgz', '/tmp/assets.tgz')
    with cd('/var/www/myapp/'):
        run('tar xzf /tmp/assets.tgz')
    
por Sergey 24.08.2012 / 02:21
0

Você pode usar sshpass para se conectar ao computador remoto e executar os comandos.

./sshpass -p "password" ssh user@remoteIP 'bash -s < EOI "Your Commands go here" EOI'

Use um script de shell simples no computador local e use o código acima sempre que quiser executar comandos no computador remoto. Esta é uma das maneiras que eu geralmente uso em automação.

    
O
por Priyanka 18.02.2013 / 13:21
0

Não, você não pode entrar na sessão existente.

Seu aplicativo precisaria de uma maneira de se conectar ao cliente. O SSH funcionaria se o cliente tivesse um servidor SSH em execução e o servidor pudesse alcançar a porta 22 no cliente. Não seria difícil automatizar se você usasse autenticação baseada em chave em vez de autenticação de senha - dessa forma, a intervenção do usuário não seria necessária.

Informações sobre como configurar a autenticação baseada em chaves podem ser encontradas aqui: link

    
por Omegamormegil 14.05.2016 / 01:45
0

Se você tiver acesso a outro terminal, você pode enviar SIGSTOP usando "kill -19 PID" para o comando ssh que iniciou a conexão. Você então obterá o controle do terminal no terminal na máquina cliente. Depois de terminar, você pode restaurar a conexão ssh simplesmente digitando fg para ativar o cliente ssh.

Mas é claro que a questão aqui é: se você já tem um terminal na máquina cliente, por que você faria isso:)

    
por Hedi 15.11.2016 / 11:04