Digamos que eu conectei a um computador remoto via SSH. Em um programa neste computador remoto, preciso executar um comando no meu computador local (o iniciador da conexão).
O que levanta a questão: é possível usar 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 usuário / nome do host do usuário conectado.
ssh
remote-access
Aeyoun
fonte
fonte
Respostas:
Às vezes, estou com uma necessidade semelhante, desde que eu conecte através do Putty ao nosso servidor VPN e, a partir daí, através do ssh para algum outro host, o que não é acessível diretamente para mim devido à configuração da VPN.
Às vezes, só preciso 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 observei, adiciona algum atraso em comparação com o "ssh regular". Outra abordagem, que eu gostaria de compartilhar aqui, é a seguinte:Enquanto estiver na sessão SSH, pressione e Enter, em seguida ~, (verifique se não é exibido, ou seja, você está no modo de comando) e, em seguida Ctrl- Z. Isso colocará o processo do cliente ssh em um "host" em segundo plano, e você terá algo como:
Agora você está no "host", pode fazer o que quiser (embora não tenha certeza de quanto tempo a sessão ssh será mantida ativa) e, em seguida, retorne à sessão SSH executando
fg
.Pelo menos, isso funciona para mim enquanto estou conectado a partir de uma estação de trabalho Win10 via Putty em uma VM baseada no CentOS e a partir dessa VM conectar-se através do SSH a algum outro host.
Espero que ajude alguém!
fonte
PermitLocalCommand yes
no seu.ssh/config
para um host, você também pode fazê<Enter>~C
-lo!<command>
.A resposta do @ 62mkv é uma solução muito melhor. Use isso.
Para completar e curiosidade, se você tiver um servidor ssh em execução na máquina local, poderá criar um túnel ssh para permitir conexões ssh do host remoto na porta 20202 de volta ao local na porta 22. Comando de exemplo:
Isso iniciará uma conexão ssh, mas também configurará um túnel para o servidor ssh em execução na sua máquina. Então você pode fazer isso quando transferido para o host remoto:
Obviamente, isso pode ficar rapidamente confuso - especialmente se a técnica for aninhada mais de uma vez. Também adiciona um pouco de latência - já que tudo que você executa na sua máquina local é devolvido através do host remoto.
Informações adicionais sobre o tunelamento ssh para aqueles cuja curiosidade ainda não foi satisfeita podem ser encontradas em resposta a esta pergunta unex stackexchange .
fonte
Se o computador local e o computador remoto estiverem acessíveis na Internet, basta abrir uma sessão SSH do computador local no computador remoto e, nessa sessão, abrir outra sessão ssh do computador remoto no computador local:
Para automatizar coisas, dê uma olhada no Fabric (é necessário conhecimento de Python)
fonte
Você pode usar o sshpass para conectar-se ao computador remoto e executar os comandos.
Use um script de shell simples no computador local e use o código acima sempre que desejar executar comandos no computador remoto. Essa é uma das maneiras geralmente usadas em automação.
fonte
Não, você não pode entrar na sessão existente.
Seu aplicativo precisaria de uma maneira de conectar-se novamente 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 por senha - dessa forma, a intervenção do usuário não seria necessária.
Informações sobre como configurar a autenticação baseada em chave podem ser encontradas aqui: http://tombuntu.com/index.php/2008/02/20/public-key-authentication-for-ssh-made-easy/
fonte
Se você tiver acesso a outro terminal, poderá enviar o SIGSTOP usando "kill -19 PID" ao comando ssh que iniciou a conexão. Você 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 pergunta aqui é: se você já possui um terminal na máquina cliente, por que faria isso :)
fonte