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/securee /var/log/auth.logconexõ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 somehostsem 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 600um 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 targethostestá 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 sshcliente 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 targethostinstâ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 /ESCAPEe você está lá.