22 dicas utilizando o SSH

22 dicas e truques SSHO comando SSH poderá auxiliar a resolver muitos problemas no dia a dia de um usuário comum ou administrador de sistemas, sendo possível utilizar nos mais diversos sistemas operacionais, tais como, LINUX, UNIX, MACOS e WINDOWS SERVER. Neste post, mostraremos 22 dicas utilizando o SSH.
O primeiro passo é definir o que é Secure SHell. O SSH (Secure SHell) é um protocolo que permite a você acessar virtualmente o servidor como se você estivesse em um terminal. A diferença entre o telnet e o SSH está na segurança. Toda a transmissão de dados no SSH é criptografada, impedindo que hacker consiga capturar as informações trafegadas, incluindo login e senha.
22 dicas utilizando o SSH
 
Quando você conecta via terminal remoto com seu servidor, você está controlando aquele servidor a partir de seu sistema operacional. Qualquer comando que você digitar é executado no servidor (e não no seu PC) e você opera de acordo com os parâmetros de comandos do servidor.

Reservamos 22 dicas utilizando o SSH para auxiliar o seu trabalho:

SSH Socks Proxy
Tunelamento (encaminhamento de porta)
Encaminhamento de túnel SSH para host remoto secundário
Túnel Reverso
Proxy Reverso
Estabeleça uma VPN sobre SSH
Copie sua chave SSH (ssh-copy-id)
Execute o comando remotamente (não interativo)
Captura remota de pacotes e exibição no Wireshark
Copiar pasta local para o servidor remoto
Aplicativos GUI remotos com encaminhamento SSH x11
Copie arquivos remotamente com rsync e SSH
SSH na rede Tor
Instância SSH para EC2
Edite arquivos de texto com o VIM sobre ssh / scp
Monte o local SSH remoto como pasta local com o SSHFS
SSH Multiplex usando o ControlPath
Stream de vídeo sobre SSH usando VLC + SFTP
Autenticação de dois fatores
Saltando através de hosts de salto com  -J
Bloquear tentativas de força bruta com iptables
Modifique o encaminhamento de porta em uma sessão com ~ C

1. Tráfego de proxy sobre SSH usando SOCKS

O recurso Proxy SSH foi colocado no número 1 por um bom motivo. É mais poderoso do que muitos usuários imaginam, fornecendo acesso a qualquer sistema que o servidor remoto possa acessar, usando quase qualquer aplicativo. O sshcliente pode encapsular o tráfego pela conexão usando um servidor proxy SOCKS com um liner rápido. Uma coisa importante a entender é que o tráfego para os sistemas remotos terá uma fonte do servidor remoto. Por exemplo, em um arquivo de log do servidor da web.
localhost: ~ $ ssh -D 8888 usuario@servidor
localhost: ~ $ netstat -pan | grep 8888
tcp 0 0 127.0.0.1:8888 0.0.0.0:* OUÇA 23880 / ssh
Aqui, iniciamos o servidor proxy de meias em execução na porta TCP 8888, o segundo comando verifica se a porta está escutando. O 127.0.0.1indica que o serviço está sendo executado apenas no host local. Podemos usar um comando ligeiramente diferente para escutar em todas as interfaces, incluindo Ethernet ou Wi-Fi, isso permitirá que outros aplicativos (navegadores ou outros) em nossa rede se conectem ao serviço de proxy ssh socks .
localhost: ~ $ ssh -D 0.0.0.0:8888 usuario@servidor servidorremoto
Agora podemos configurar nosso navegador para conectar-se ao proxy de meias. No Firefox, selecione preferências | geral | configurações de rede . Adicione o endereço IP e a porta para a conexão do navegador.
Observe a opção na parte inferior do formulário para forçar as solicitações de DNS do navegador para também passarem pelo proxy de meias . Se você estiver usando o proxy para criptografar o tráfego da Web na rede local, definitivamente desejará selecionar esta opção para que as solicitações de DNS também sejam tunelizadas pela conexão SSH.
Ativar proxy no Chrome
O uso de um parâmetro de linha de comando ao iniciar o Chrome usará o proxy socks e também encapsulará solicitações DNS do navegador sobre o proxy socks5. Confie, mas verifique, use o tcpdump (tcpdump, não a porta 22) para confirmar que as solicitações de DNS não estão mais visíveis.
localhost: ~ $ google-chrome –proxy-server = “socks5: //192.168.1.10: 8888”
Usando outros aplicativos com o Proxy
Lembre-se de que existem muitos outros aplicativos que podem utilizar um proxy de meias . Um navegador da web é simplesmente o mais popular. Alguns aplicativos terão opções de configuração para uso do proxy. Outros podem precisar de ajuda usando um programa auxiliar que fala o protocolo de meias. Um exemplo disso é proxychains . Usando esta ferramenta, podemos, por exemplo, usar o Microsoft RDP sobre o proxy de meias.
localhost: ~ $ proxychains rdesktop$ ServidorWindowsRemoto
As opções de configuração para o proxy socks são definidas no arquivo de configuração proxychains.
Dica: Usando a área de trabalho remota do Linux para o Windows? Experimente o cliente FreeRDP. Uma implementação mais moderna do que rdesktop com uma interação muito mais suave.

2. Tunelamento (encaminhamento de porta)

Na sua forma mais simples, um túnel SSH abre uma porta no sistema local que se conecta a outra porta na outra extremidade do túnel.
localhost: ~ $ ssh -L 9999: 127.0.0.1:80 usuario@servidorremoto
Vamos quebrar o parâmetro -L . Pense em -L como o lado de escuta local. Assim, em nosso exemplo acima, a porta 9999 está escutando em localhost e a porta para a frente até a porta 80 em servidorremoto , nota que a 127.0.0.1 refere-se ao localhost no servidor remoto!
Vamos aumentar um pouco. Neste exemplo a seguir, a porta que está ouvindo pode ser conectada a partir de outros hosts na rede local.
localhost: ~ $ ssh -L 0.0.0.0:9999:127.0.0.1:80 usuario@servidorremoto
Nestes exemplos, a porta que estamos conectando é um servidor da Web de escuta. Também pode ser um servidor proxy ou qualquer outro serviço TCP.

3. Encaminhamento de túnel SSH para host remoto secundário

Podemos usar as mesmas opções vistas acima para que o túnel se conecte a outro serviço em execução em um sistema secundário a partir do servidor remoto.
localhost: ~ $ ssh -L 0.0.0.0:9999:192.168.1.10:80 usuario@servidorremoto
Neste exemplo, estamos encaminhando o túnel do servidorremoto para o servidor Web em execução em 192.168.1.10. O tráfego do servidorremoto -> 192.168.1.10 não está mais no túnel ssh . O servidor da Web em 192.168.1.10 verá o servidorremoto como a fonte das solicitações da Web.

4. Túnel Reverso

Nesse cenário, queremos configurar uma porta de escuta no servidor remoto que se conectará novamente a uma porta local em nosso host local (ou outro sistema).
localhost: ~ $ ssh -v -R 0.0.0.0:1999:127.0.0.1:902 192.168.1.100 usuario@servidorremoto
Com esta sessão ssh estabelecida, uma conexão com a porta remota do servidor 1999 será encaminhada para a porta 902 em nosso cliente local.

5. Proxy Reverso

Nesse caso, estamos estabelecendo um proxy SOCKS com nossa conexão ssh, no entanto, o proxy está escutando no servidor remoto. Com as conexões com esse proxy de meias remotas, agora emergindo do túnel como tráfego originário de nosso host local.
localhost: ~ $ ssh -v -R 0.0.0.0:1999 192.168.1.10 usuario@servidorremoto
Solução de problemas de túneis SSH remotos
Se estiver com problemas para que as opções SSH remotas funcionem, verifique com netstat na qual interface a porta de atendimento também está conectada. Mesmo que tenhamos especificado 0.0.0.0 nos exemplos acima, se GatewayPorts estiver definido como no sshd_config , o ouvinte ligará apenas ao localhost (127.0.0.1).
Aviso de segurança
Observe que, ao abrir túneis e socks proxies, você pode estar expondo os recursos internos da rede a redes não confiáveis (como a Internet!). Isso pode ser um sério risco de segurança, portanto, entenda o que está ouvindo e o que ele tem acesso também.

6. Estabeleça uma VPN sobre SSH

Um termo comum entre o pessoal de segurança ofensivo (pentesters / equipes vermelhas / etc), é dinamizar em uma rede. Depois de estabelecer uma conexão em um sistema, esse sistema se torna um ponto de gateway para acesso adicional à rede. Isso é conhecido como rotação e permite o movimento lateral através da rede.
Podemos usar o proxy SSH para isso e proxychains , no entanto, existem algumas limitações. Por exemplo, não podemos usar soquetes brutos, portanto, as verificações do Nmap SYN não podem ser usadas para verificar a porta da rede interna.
Usando esta opção de VPN mais avançada, movemos a conectividade para a camada 3 . Em seguida, podemos rotear o tráfego pelo túnel usando o roteamento de rede padrão.
Esta técnica utiliza ssh, iptables, tun interfaces e roteamento.
Primeiro, precisamos dessas opções definidas no sshd_config. Como estamos fazendo alterações na interface no sistema remoto e no sistema cliente, precisaremos de privilégios de root em ambos os lados .
PermitRootLogin yes
PermitTunnel yes
Em seguida, estabeleceremos nossa conexão ssh usando o parâmetro que solicita a inicialização do tun dos dispositivos.
localhost: ~ # ssh -v -w qualquer root@servidorremoto
Agora você deve ter um dispositivo tun ao mostrar interfaces ( # ip a). O próximo passo é adicionar endereços IP às interfaces do túnel.
Lado do Cliente SSH:
localhost: ~ # ip addr add 10.10.10.2/32 ponto 10.10.10.10 dev tun0
localhost: ~ # ip tun0 up
Lado do servidor SSH:
remoteserver: ~ # ip addr add 10.10.10.10/32 ponto 10.10.10.2 dev tun0
remoteserver: ~ # ip tun0 up
Agora devemos ter uma rota direta para o outro host ( route -ne ping 10.10.10.10).
Agora é possível rotear qualquer sub-rede através do host do outro lado.
localhost: ~ # route add -net 10.10.10.0 máscara de rede 255.255.255.0 dev tun0
No lado remoto, precisamos ativar ip_forwarde iptables.
servidorremoto: ~ # echo 1> / proc / sys / net / ipv4 / ip_forward
servidorremoto: ~ # iptables -t nat -A POSTROUTING -s 10.10.10.2 -o enp7s0 -j ??MASQUERADE
Estrondo! Camada três VPN através de um túnel SSH . Agora isso está ganhando.
Qualquer problema, tente tcpdump e ping, então veja onde está quebrado/bloqueando. Como estamos utilizando na camada 3, nossos pacotes icmp devem estar pulando através desse túnel.

7. Copie sua chave SSH (ssh-copy-id)

Existem várias maneiras de conseguir isso, no entanto, este comando é um atalho que economiza tempo. O que isso realmente faz? Este comando replica o que você também pode fazer manualmente. Copiar a chave ~/.ssh/id_rsa.pub(ou a padrão) do seu sistema e adicioná-la a um ~/.ssh/authorized_keysarquivo no servidor remoto.
localhost: ~ $ ssh-copy-id usuario@servidorremoto

8. Execute o comando remotamente (não interativo)

O sshcomando pode ser acorrentado a outros comandos para a diversão de tubulação usual. Adicione o comando que você deseja executar no host remoto como um parâmetro final entre aspas.
localhost: ~ $ ssh servidorremoto “cat /var/log/nginx/access.log” | grep badstuff.php
Neste exemplo, o comando grep está sendo executado no sistema local após o envio do arquivo de log pela sessão ssh. Se o arquivo for grande, seria mais eficiente executar o comando grep no lado remoto, colocando o caminho entre aspas duplas.
Outro exemplo executa a mesma função que o ssh-copy-idatalho na dica 7.
localhost: ~ $ cat ~/.ssh /id_rsa.pub | ssh remoteserver ‘cat >> .ssh / allowed_keys’

9. Captura remota de pacotes e exibição no Wireshark

Peguei este em nossos exemplos de tcpdump . Use-o para uma captura remota de pacotes, com os resultados diretamente na GUI local do Wireshark.
localhost: ~ $ ssh root @ remoteserver ‘tcpdump -c 1000 -nn -w – não porta 22’ | wireshark -k -i –

10. Copiar pasta local para o servidor remoto

Um truque interessante que comprime uma pasta usando bzip2(que é o -j no tarcomando) e extrai o bzip2fluxo do outro lado, criando uma duplicata da pasta no servidor remoto.
localhost: ~ $ tar -cvj /pasta de dados | ssh remoteserver “tar -xj -C / pasta de dados”
Copiar pasta remota para o arquivo tar local
Para o contrário, copie uma pasta remota para um arquivo local. Útil para backups rápidos de recursos remotos.
localhost: ~ $ ssh user @ remoteserver “tar -jcf – /caminho/para/backup”> dir.tar.bz2

11. Aplicativos GUI remotos com encaminhamento SSH x11

Se o cliente e o servidor remoto tiverem o X instalado. É possível executar um comando da GUI remotamente, com a janela aparecendo na área de trabalho local. Esse recurso existe desde o início dos tempos, mas ainda pode ser muito útil. Execute um navegador da Web remoto ou até o console do VMWawre Workstation, como eu faço neste exemplo.
localhost: ~ $ ssh -X remoteserver vmware
Requer: X11Forwarding yesno sshd_config.

12. Copie arquivos remotamente com rsync e SSH

O uso do programa rsyncpossui muitas vantagens scp: se periodicamente for necessário fazer backup de um diretório, um grande número de arquivos ou arquivos muito grandes deverá ser usado. Ele tem a capacidade de se recuperar de transferências com falha e apenas copiar diferenças entre dois locais, economizando largura de banda e tempo.
O exemplo aqui usa o modo de gzipcompactação (-z) e archive (-a) que inclui cópia recursiva.
: ~ $ rsync -az /home/usuario/data servidorremoto: backup /

13. Acesso a rede Tor

A Tor Network anônima pode encapsular o tráfego SSH usando o comando torsocks. O comando a seguir fará proxy da sshconexão através da rede Tor.
localhost: ~ $ torsocks ssh usuario@servidorremoto
O Torsocks usará a porta 9050 do host local para o tráfego proxy. Como sempre, ao usar uma consideração séria, é preciso ter em consideração o tráfego que está sendo tunelizado e outras preocupações de segurança operacional (opsec).

14. Instância SSH para EC2

Ao usar o SSH para conectar-se à sua instância do EC2 na Amazon, você precisará usar uma chave privada. Faça o download da chave (extensão .pem) no painel de controle do Amazon EC2 e altere as permissões ( chmod 400 my-ec2-ssh-key.pem. Mantenha essa chave em algum lugar seguro ou coloque-a na sua ~/.ssh/pasta.
localhost: ~ $ ssh -i ~ / .ssh /EC2-key.pem ubuntu@my-ec2-public
O parâmetro -i diz ao cliente ssh para usar esta chave. Este seria um exemplo ideal de onde usar o ~/.ssh/configpara configurar o uso da chave automaticamente ao conectar-se ao host ec2.
Hospedar my-ec2-public
Nome do host ec2  server-1.amazonaws.com
Usuário ubuntu
IdentityFile ~ / .ssh /EC2-key.pem

15. Edite arquivos de texto com o VIM sobre ssh / scp

Para todos os usuário do vim por aí, este pode economizar algum tempo. Usando vim, podemos editar arquivos scp com um único comando. O uso desse método cria um arquivo no /tmpsistema local e o copia novamente assim que escrevermos o arquivo vim.
localhost: ~ $ vim scp: // usuário @ servidorremoto // etc / hosts
Observe que o formato é um pouco diferente do normal scp. Após o anfitrião, temos um duplo //. Isso faz referência ao caminho absoluto. Uma única barra terá um caminho que é relativo ao diretório inicial dos usuários.
** aviso **
(netrw) não pode determinar o método (formato: protocolo: // [usuário @] nome do host [: porta] / [caminho])
Se você vir esse erro, verifique o formato do seu comando. Isso geralmente significa que há um erro de sintaxe.

16. Monte o local SSH remoto como pasta local com o SSHFS

Usando sshfs- um cliente ssh do sistema de arquivos, podemos montar um diretório local em um local remoto, com toda a interação do arquivo ocorrendo durante a sshsessão criptografada .
localhost: ~ $ apt install sshfs
No sistema baseado no Ubuntu e Debian, instalamos o  pacote sshfse montamos o local remoto.
localhost: ~ $ sshfs usuario@servidorremoto:/media/data ~/data /

17. SSH Multiplex usando ControlPath

Por padrão, quando você possui uma conexão existente com um servidor remoto ssh, uma segunda conexão usa ssh ou estabelece scp uma nova sessão com a sobrecarga de autenticação.
Usando as opções ControlPath, podemos usar a sessão existente para todas as conexões subsequentes. Isso irá acelerar as coisas significativamente. É perceptível mesmo em uma rede local, mas ainda mais quando se conecta a recursos remotos.
Servidor remoto do host
HostName remoteserver.example.org
ControlMaster auto
ControlPath ~/.ssh/control/%r@%h:% p
ControlPersist 10m
ControlPath indica um soquete verificado por novas conexões para verificar se existe uma sessão ssh existente que possa ser usada. A opção ControlPersist acima significa que, mesmo após a saída do terminal, a sessão existente permanecerá aberta por 10 minutos; portanto, se você se reconectar dentro desse período, usaria o soquete existente. Veja a página man ssh_config para mais informações.

18. Stream de vídeo sobre SSH usando VLC + SFTP

Os usuários de longa data sshe vlc(Video Lan Client) nem sempre estão cientes dessa opção útil para quando você precisa assistir a vídeos pela rede. Usando a opção vlc para Arquivo | Um fluxo de rede aberto pode ser inserido como um sftp://local. Um prompt será exibido para detalhes da autenticação, se a senha for necessária.
sftp://remoteserver//media/uploads/myvideo.mkv

19. Autenticação de dois fatores

A maioria dos leitores entenderá o valor do uso da autenticação de dois fatores ; os mesmos benefícios que se aplicam à sua conta bancária ou à Conta do Google podem ser aplicados ao seu serviço SSH.
É claro que o SecureShell vem com uma forma de capacidade de dois fatores incluída, sendo uma senha e uma chave SSH. Uma vantagem de usar um token baseado em hardware ou o Google Authenticator App é o fato de geralmente serem provenientes de um segundo dispositivo físico.

20. Saltando através de hosts de salto com  -J

Quando a segmentação de rede significa que você está pulando em vários hosts ssh para chegar a uma rede ou host de destino final, esse atalho de host de salto pode ser exatamente o que você precisa.
Requer o OpenSSH versão 7.3 ou superior .
localhost: ~ $ ssh -J host1, host2, host3 usuário@host4.internal
Uma coisa importante a entender aqui é que isso não é o mesmo de ssh host1então user@host1:~$ ssh host2, o parâmetro jump  -J usa truques de encaminhamento para que o host local esteja estabelecendo a sessão com o próximo host da cadeia. Portanto, nosso host local está se autenticando com o host4 no exemplo acima; ou seja, nossas chaves de host local são usadas e a sessão de host local para host4 é criptografada de ponta a ponta .
Para usar essa capacidade,  use no ssh_config a opção de configuração ProxyJump . Se você precisar pular regularmente por vários hosts; use o arquivo de configuração e seu alias para host4 e economizará muito tempo.

21. Bloquear tentativas de força bruta com iptables

Qualquer pessoa que tenha gerenciado um serviço SSH na Internet e visualizado os logs estará ciente da quantidade de tentativas de força bruta caso ocorrem a cada hora de cada dia. Uma maneira imediata de reduzir o ruído em seus logs é mover o SSH para uma porta diferente de 22 . Faça a alteração no arquivo sshd_config usando a opção de configuração da porta ## .
O uso iptables também pode bloquear tentativas de conexão à porta a partir de fontes que atingem um determinado limite. Uma maneira de fazer isso é usar o OSSEC , pois isso não apenas bloqueia a porta 22, mas também executa várias outras funções de detecção de intrusão (HIDS) baseadas em host.

22. Modifique o encaminhamento de porta em uma sessão com ~ C

Em nosso exemplo final, é para modificar o encaminhamento de porta em tempo real dentro de uma  sessão ssh existente . Imagine este cenário de exemplo. Você é conhecedor profundo de uma rede, talvez você tenha pulado meia dúzia de hosts de salto e precise de uma porta local em sua estação de trabalho encaminhada para o Microsoft SMB no antigo sistema Windows 2003.
Depois de bater, enter tente digitar ~C no seu terminal. Essa é uma sequência de escape de controle dentro da sessão que permite fazer alterações na conexão existente.
localhost: ~ $ ~ C
ssh> -h
Comandos:
-L [bind_address:] port: host: hostport Solicita o encaminhamento local
-R [bind_address:] port: host: hostport Solicita o encaminhamento remoto
-D [bind_address:] port Solicita encaminhamento dinâmico
-KL [bind_address:] port Cancela o encaminhamento local
-KR [bind_address:] port Cancelar encaminhamento remoto
-KD [bind_address:] port Cancela o encaminhamento dinâmico
ssh> -L 1445: remote-win2k3: 445
Porta de encaminhamento.
Você pode ver aqui que encaminhamos nossa porta local 1445 para o host do Windows 2003 que encontramos na rede interna. Agora inicie console msf e estamos prontos (assumindo que você planejava explorar esse host ).

Conclusão

Os truques e dicas mostrados neste artigo irão facilitar a sua vida. Caso tenha mais interesse, segue alguns links adicionais.
Como conectar a um servidor SSH com o SSHFS

 
Como habilitar acesso ROOT via SSH no Ubuntu

 

FONTE: Blog SempreUpdate
Meu agradecimento pelas excelentes publicações!