Respostas:
É muito simples com versões suficientes do OpenSSH, se você planeja com antecedência.
Abra uma conexão principal pela primeira vez. Para conexões subseqüentes, roteie as conexões escravas através da conexão principal existente. No seu ~/.ssh/config
, configure o compartilhamento de conexão para que ocorra automaticamente:
ControlMaster auto
ControlPath ~/.ssh/control:%h:%p:%r
Se você iniciar uma sessão ssh da mesma maneira (usuário, porta, máquina) que uma conexão existente, a segunda sessão será encapsulada na primeira. O estabelecimento da segunda conexão não requer nova autenticação e é muito rápido.
/var/log/secure
e /var/log/auth.log
conexões SSH de log; uma conexão escrava não aparece lá porque faz o retrocesso em uma conexão existente. Se a sua sessão ssh alocar um terminal (ou seja, ssh somehost
sem nenhum comando fornecido, ou ssh -t
), isso é (normalmente) efetuado login wtmp
, independentemente de como o terminal apareceu (sshd, qualquer método usado para estabelecer a conexão, aplicativo emulador de terminal, ...).
ControlPersist 600
um atraso em segundos do soquete ocioso antes de ser excluído automaticamente. Caso contrário, ele será encerrado automaticamente quando a conexão principal terminar. Isso não é bom para a execução de uma série de comandos remotamente (por exemplo, uma série de comandos rsync para pastas diferentes.)
-S
(especificar soquete) e -M
(criar conexão principal) do cliente SSH.
É muito fácil conseguir isso usando a ferramenta nc e os túneis ssh.
Na sua sessão ssh, digite ~Cuma nova linha. Você receberá o prompt ssh "service console", que se parece com isto:
ssh>
Digite o comando forward local para abrir um túnel ssh:
ssh> -L22000:targethost:22001
Forwarding port.
Onde targethost
está o nome do host ou o endereço IP da máquina à qual você está conectado.
Agora, supondo que o servidor ssh na máquina de destino não esteja configurado para proibir túneis, você tem o encaminhamento de conexão desejado: o ssh
cliente em sua máquina escuta a porta 22000 e encaminhará qualquer tráfego enviado a ela para a porta 22001 targethost
.
Isso é tão simples quanto entrar na sua sessão ssh já aberta, com o seguinte comando:
remote$ nc -l localhost 22001 | sh
Isso iniciará um servidor TCP atendendo na porta 22001 - que é a porta de destino do nosso túnel ssh - e encaminhará os dados recebidos (presumivelmente, comandos do shell) para uma targethost
instância do shell.
local$ cat yourscript.sh | nc localhost 22000
Isso enviará o corpo do script para o seu túnel ssh e acabará sendo executado em um shell no targethost
. Você verá a saída do script em seu terminal com a sessão ssh.
Também observarei que o túnel ssh (etapa 1.) nesse cenário não é estritamente necessário; você também pode abrir o servidor e conectar-se a ele diretamente pela Internet. No entanto, você precisará usar o túnel se o host de destino não puder ser acessado diretamente (por exemplo, estiver atrás de um NAT) ou se a criptografia ssh for desejada.
~
personagem deve vir após uma nova linha, portanto LF ~ C
é provavelmente uma sequência melhor.
less
, o pager padrão comum, suporta pesquisas que podem economizar algumas rolagens se você souber suas palavras-chave: basta digitar man ssh
/ESCAPE
e você está lá.