Exemplos práticos SSH, o que levará suas habilidades como administrador de sistema remoto a um novo nível. Comandos e dicas vão ajudar não só a usar SSH, mas também navegar na rede com mais competência.
Conhecendo alguns truques ssh útil para qualquer administrador de sistema, engenheiro de rede ou especialista em segurança.
O exemplo a seguir usa parâmetros comuns frequentemente encontrados ao se conectar a um servidor remoto SSH.
localhost:~$ ssh -v -p 22 -C neo@remoteserver
-v: a saída de depuração é especialmente útil ao analisar problemas de autenticação. Pode ser usado várias vezes para exibir informações adicionais.
- p 22: porta de conexão para um servidor SSH remoto. 22 não precisa ser especificado, pois este é o valor padrão, mas se o protocolo estiver em alguma outra porta, então o especificamos usando o parâmetro -p. A porta de escuta é especificada no arquivo sshd_config em formato Port 2222.
-C: Compressão para conexão. Se você tiver uma conexão lenta ou visualizar muito texto, isso poderá acelerar a conexão.
neo@: A linha antes do símbolo @ indica o nome de usuário para autenticação no servidor remoto. Se você não especificá-lo, o padrão será o nome de usuário da conta na qual você está conectado no momento (~$whoami). O usuário também pode ser especificado usando o parâmetro -l.
remoteserver: nome do host ao qual se conectar ssh, pode ser um nome de domínio totalmente qualificado, um endereço IP ou qualquer host no arquivo de hosts locais. Para se conectar a um host que suporte IPv4 e IPv6, você pode adicionar o parâmetro à linha de comando -4 ou -6 para resolução adequada.
Todos os parâmetros acima são opcionais, exceto remoteserver.
Usando o arquivo de configuração
Embora muitos estejam familiarizados com o arquivo sshd_config, há também um arquivo de configuração do cliente para o comando ssh. Valor padrão ~/.ssh/config, mas pode ser definido como um parâmetro para uma opção -F.
Host *
Port 2222
Host remoteserver
HostName remoteserver.thematrix.io
User neo
Port 2112
IdentityFile /home/test/.ssh/remoteserver.private_key
Existem duas entradas de host no arquivo de configuração ssh de exemplo acima. O primeiro significa todos os hosts, todos usando o parâmetro de configuração Porta 2222. O segundo diz que para o host servidor remoto um nome de usuário, porta, FQDN e IdentityFile diferentes devem ser usados.
Um arquivo de configuração pode economizar muito tempo de digitação, permitindo que configurações avançadas sejam aplicadas automaticamente ao conectar-se a hosts específicos.
Copiando arquivos via SSH usando SCP
O cliente SSH vem com duas outras ferramentas muito úteis para copiar arquivos conexão ssh criptografada. Veja abaixo um exemplo de uso padrão dos comandos scp e sftp. Observe que muitas das opções ssh também se aplicam a esses comandos.
Neste exemplo o arquivo minhaimagem.png copiado para servidor remoto para a pasta /mídia/dados e renomeado para minhapic_2.png.
Não se esqueça da diferença no parâmetro port. É aqui que muitas pessoas são pegas quando lançam scp na linha de comando. Aqui está o parâmetro da porta -PE não -p, assim como em um cliente ssh! Você vai esquecer, mas não se preocupe, todo mundo esquece.
Para quem está familiarizado com console ftp, muitos dos comandos são semelhantes em sftp... Você pode fazer empurrar, colocar и lscomo o coração deseja.
sftp neo@remoteserver
Exemplos práticos
Em muitos destes exemplos, os resultados podem ser alcançados utilizando diferentes métodos. Como em todos os nossos livros didáticos e exemplos, é dada preferência a exemplos práticos que simplesmente fazem o seu trabalho.
1. Proxy de meias SSH
O recurso SSH Proxy é o número 1 por um bom motivo. É mais poderoso do que muitos imaginam e dá acesso a qualquer sistema ao qual o servidor remoto tenha acesso, usando praticamente qualquer aplicativo. Um cliente ssh pode encapsular o tráfego através de um proxy SOCKS com um comando simples. É importante entender que o tráfego para sistemas remotos virá de um servidor remoto, isso será indicado nos logs do servidor web.
Aqui executamos um proxy meias na porta TCP 8888, o segundo comando verifica se a porta está ativa no modo de escuta. 127.0.0.1 indica que o serviço é executado apenas em localhost. Podemos usar um comando ligeiramente diferente para escutar em todas as interfaces, incluindo ethernet ou wifi, isso permitirá que outros aplicativos (navegadores, etc.) em nossa rede se conectem ao serviço de proxy através do proxy ssh Socks.
Agora podemos configurar o navegador para se conectar ao proxy meias. No Firefox, selecione Configurações | Básico | Configurações de rede. Especifique o endereço IP e a porta para conectar.
Observe a opção na parte inferior do formulário para que as solicitações de DNS do seu navegador também passem por um proxy SOCKS. Se você estiver usando um servidor proxy para criptografar o tráfego da web em sua rede local, provavelmente desejará selecionar esta opção para que as solicitações DNS sejam encapsuladas por meio da conexão SSH.
Ativando proxy de meias no Chrome
Iniciar o Chrome com determinados parâmetros de linha de comando ativará o proxy meias, bem como encapsulará solicitações de DNS do navegador. Confie, mas verifique. Usar tcpdump para verificar se as consultas DNS não estão mais visíveis.
Tenha em mente que muitos outros aplicativos também podem usar proxies de meias. O navegador da web é simplesmente o mais popular de todos. Alguns aplicativos possuem opções de configuração para ativar um servidor proxy. Outros precisam de uma ajudinha com um programa auxiliar. Por exemplo, cadeias de proxy permite que você execute um proxy de meias Microsoft RDP, etc.
Os parâmetros de configuração do proxy Socks são definidos no arquivo de configuração proxychains.
Dica: se você usa a área de trabalho remota do Linux no Windows? Experimente o cliente FreeRDP. Esta é uma implementação mais moderna do que rdesktop, com uma experiência muito mais suave.
Opção para usar SSH via proxy meias
Você está sentado em um café ou hotel - e é forçado a usar um WiFi pouco confiável. Lançamos um proxy ssh localmente a partir de um laptop e instalamos um túnel ssh na rede doméstica em um Rasberry Pi local. Usando um navegador ou outros aplicativos configurados para um proxy Socks, podemos acessar qualquer serviço de rede em nossa rede doméstica ou acessar a Internet por meio de nossa conexão doméstica. Tudo entre o seu laptop e o seu servidor doméstico (via Wi-Fi e internet para sua casa) é criptografado em um túnel SSH.
2. Túnel SSH (encaminhamento de porta)
Na sua forma mais simples, um túnel SSH simplesmente abre uma porta no seu sistema local que se conecta a outra porta na outra extremidade do túnel.
Vejamos o parâmetro -L. Pode ser pensado como o lado local da escuta. Portanto, no exemplo acima, a porta 9999 está escutando no lado do host local e encaminhada pela porta 80 para o servidor remoto. Observe que 127.0.0.1 refere-se ao localhost no servidor remoto!
Vamos subir o degrau. O exemplo a seguir comunica portas de escuta com outros hosts na rede local.
Neste exemplo, estamos redirecionando um túnel do servidor remoto para um servidor web rodando em 10.10.10.10. Tráfego do servidor remoto para 10.10.10.10 não está mais no túnel SSH. O servidor web em 10.10.10.10 considerará o servidor remoto como a fonte das solicitações web.
4. Túnel SSH reverso
Aqui iremos configurar uma porta de escuta no servidor remoto que se conectará de volta à porta local em nosso host local (ou outro sistema).
Esta sessão SSH estabelece uma conexão da porta 1999 no servidor remoto até a porta 902 em nosso cliente local.
5. Proxy reverso SSH
Nesse caso, estamos configurando um proxy meias em nossa conexão ssh, mas o proxy está escutando na extremidade remota do servidor. As conexões com esse proxy remoto agora aparecem no túnel como tráfego de nosso host local.
Se você tiver problemas com o funcionamento das opções de SSH remoto, verifique com netstat, a quais outras interfaces a porta de escuta está conectada. Embora tenhamos indicado 0.0.0.0 nos exemplos, mas se o valor Portas de gateway в sshd_config definido como não, o ouvinte será vinculado apenas ao localhost (127.0.0.1).
Aviso de segurança
Observe que, ao abrir túneis e proxies de meias, os recursos da rede interna podem ficar acessíveis a redes não confiáveis (como a Internet!). Isso pode ser um sério risco à segurança, portanto, certifique-se de entender o que é o ouvinte e a que ele tem acesso.
6. Instalando VPN via SSH
Um termo comum entre especialistas em métodos de ataque (pentesters, etc.) é “um ponto de apoio na rede”. Depois que uma conexão é estabelecida em um sistema, esse sistema se torna o gateway para acesso adicional à rede. Um ponto de apoio que permite que você se mova em amplitude.
Para tal, podemos usar um proxy SSH e cadeias de proxy, no entanto, existem algumas limitações. Por exemplo, não será possível trabalhar diretamente com soquetes, portanto não poderemos escanear portas dentro da rede via NmapSYN.
Usando esta opção VPN mais avançada, a conexão é reduzida a Nível 3. Podemos então simplesmente rotear o tráfego através do túnel usando roteamento de rede padrão.
O método usa ssh, iptables, tun interfaces e roteamento.
Primeiro você precisa definir esses parâmetros em sshd_config. Como estamos fazendo alterações nas interfaces dos sistemas remoto e cliente, precisa de direitos de root em ambos os lados.
PermitRootLogin yes
PermitTunnel yes
Em seguida estabeleceremos uma conexão ssh utilizando o parâmetro que solicita a inicialização dos dispositivos tun.
localhost:~# ssh -v -w any root@remoteserver
Devemos agora ter um dispositivo tun ao mostrar interfaces (# ip a). A próxima etapa adicionará endereços IP às interfaces do túnel.
Lado do cliente SSH:
localhost:~# ip addr add 10.10.10.2/32 peer 10.10.10.10 dev tun0
localhost:~# ip tun0 up
Lado do servidor SSH:
remoteserver:~# ip addr add 10.10.10.10/32 peer 10.10.10.2 dev tun0
remoteserver:~# ip tun0 up
Agora temos uma rota direta para outro host (route -n и ping 10.10.10.10).
Você pode rotear qualquer sub-rede através de um host do outro lado.
localhost:~# route add -net 10.10.10.0 netmask 255.255.255.0 dev tun0
No lado remoto você deve habilitar ip_forward и iptables.
Boom! VPN sobre túnel SSH na camada de rede 3. Agora isso é uma vitória.
Se ocorrer algum problema, use tcpdump и pingpara determinar a causa. Como estamos jogando na camada 3, nossos pacotes icmp passarão por esse túnel.
7. Copie a chave SSH (ssh-copy-id)
Existem várias maneiras de fazer isso, mas este comando economiza tempo ao não copiar os arquivos manualmente. Ele simplesmente copia ~/.ssh/id_rsa.pub (ou a chave padrão) do seu sistema para ~/.ssh/authorized_keys em um servidor remoto.
localhost:~$ ssh-copy-id user@remoteserver
8. Execução remota de comandos (não interativo)
equipe ssh Pode ser vinculado a outros comandos para uma interface comum e amigável. Basta adicionar o comando que deseja executar no host remoto como o último parâmetro entre aspas.
Neste exemplo grep executado no sistema local após o download do log via canal ssh. Se o arquivo for grande, é mais conveniente executar grep no lado remoto simplesmente colocando ambos os comandos entre aspas duplas.
Outro exemplo executa a mesma função que ssh-copy-id do exemplo 7.
9. Captura e visualização remota de pacotes no Wireshark
Eu peguei um dos nossos exemplos de tcpdump. Use-o para capturar pacotes remotamente e exibir os resultados diretamente na GUI local do Wireshark.
:~$ ssh root@remoteserver 'tcpdump -c 1000 -nn -w - not port 22' | wireshark -k -i -
10. Copiando uma pasta local para um servidor remoto via SSH
Um bom truque que compacta uma pasta usando bzip2 (esta é a opção -j no comando tar) e, em seguida, recupera o fluxo bzip2 por outro lado, criando uma pasta duplicada no servidor remoto.
11. Aplicativos GUI remotos com encaminhamento SSH X11
Se o X estiver instalado no cliente e no servidor remoto, você poderá executar remotamente um comando GUI com uma janela na área de trabalho local. Esse recurso já existe há muito tempo, mas ainda é muito útil. Inicie um navegador remoto ou até mesmo o console da estação de trabalho VMWawre, como faço neste exemplo.
localhost:~$ ssh -X remoteserver vmware
Sequência obrigatória X11Forwarding yes no arquivo sshd_config.
12. Cópia remota de arquivos usando rsync e SSH
rsync muito mais conveniente scp, se precisar de backups periódicos de um diretório, de um grande número de arquivos ou de arquivos muito grandes. Existe uma função de recuperação de falha de transferência e cópia apenas dos arquivos alterados, o que economiza tráfego e tempo.
Este exemplo usa compactação gzip (-z) e modo de arquivamento (-a), que permite a cópia recursiva.
Torsocks usará a porta 9050 no localhost para proxy. Como sempre, ao usar o Tor você precisa verificar seriamente qual tráfego está sendo encapsulado e outros problemas de segurança operacional (opsec). Para onde vão suas consultas de DNS?
14. SSH para instância EC2
Para se conectar a uma instância EC2, você precisa de uma chave privada. Baixe-o (extensão .pem) no painel de controle do Amazon EC2 e altere as permissões (chmod 400 my-ec2-ssh-key.pem). Guarde a chave em um local seguro ou coloque-a em sua própria pasta ~/.ssh/.
Parâmetro -i simplesmente diz ao cliente ssh para usar esta chave. Arquivo ~/.ssh/config Ideal para configurar automaticamente o uso de chaves ao conectar-se a um host ec2.
Host my-ec2-public
Hostname ec2???.compute-1.amazonaws.com
User ubuntu
IdentityFile ~/.ssh/my-ec2-key.pem
15. Editando arquivos de texto usando VIM via ssh/scp
Para todos os amantes vim Essa dica vai economizar algum tempo. Usando vim os arquivos são editados via scp com um comando. Este método simplesmente cria o arquivo localmente em /tmpe depois copia-o de volta assim que o salvamos de vim.
localhost:~$ vim scp://user@remoteserver//etc/hosts
Nota: o formato é um pouco diferente do habitual scp. Depois do anfitrião temos o dobro //. Esta é uma referência de caminho absoluta. Uma barra indicará um caminho relativo à sua pasta pessoal users.
Se você vir esse erro, verifique novamente o formato do comando. Isso geralmente significa um erro de sintaxe.
16. Montando um SSH remoto como uma pasta local com SSHFS
Por meio de sshfs - cliente do sistema de arquivos ssh - podemos conectar um diretório local a um local remoto com todas as interações de arquivos em uma sessão criptografada ssh.
localhost:~$ apt install sshfs
Instale o pacote no Ubuntu e Debian sshfse simplesmente monte o local remoto em nosso sistema.
Por padrão, se houver uma conexão existente com um servidor remoto usando ssh segunda conexão usando ssh ou scp estabelece uma nova sessão com autenticação adicional. Opção ControlPath permite que a sessão existente seja usada para todas as conexões subsequentes. Isso irá acelerar significativamente o processo: o efeito é perceptível mesmo em uma rede local, e ainda mais quando conectado a recursos remotos.
Host remoteserver
HostName remoteserver.example.org
ControlMaster auto
ControlPath ~/.ssh/control/%r@%h:%p
ControlPersist 10m
ControlPath especifica o soquete para verificar novas conexões para ver se há uma sessão ativa ssh. A última opção significa que mesmo depois de sair do console, a sessão existente permanecerá aberta por 10 minutos, portanto durante esse tempo você poderá reconectar-se no soquete existente. Para obter mais informações, consulte a ajuda. ssh_config man.
18. Transmita vídeo por SSH usando VLC e SFTP
Mesmo usuários antigos ssh и vlc (Video Lan Client) nem sempre conhece esta opção conveniente quando você realmente precisa assistir a um vídeo pela rede. Nas configurações Arquivo | Fluxo de rede aberto programa vlc você pode inserir o local como sftp://. Se uma senha for necessária, um prompt aparecerá.
sftp://remoteserver//media/uploads/myvideo.mkv
19. Autenticação de dois fatores
A mesma autenticação de dois fatores da sua conta bancária ou conta do Google se aplica ao serviço SSH.
Naturalmente, ssh inicialmente possui uma função de autenticação de dois fatores, o que significa uma senha e uma chave SSH. A vantagem de um token de hardware ou aplicativo Google Authenticator é que geralmente é um dispositivo físico diferente.
Se a segmentação da rede significa que você precisa passar por vários hosts ssh para chegar à rede de destino final, o atalho -J economizará seu tempo.
A principal coisa a entender aqui é que isso não é o mesmo que o comando ssh host1em seguida user@host1:~$ ssh host2 etc. A opção -J usa habilmente o encaminhamento para forçar o host local a estabelecer uma sessão com o próximo host na cadeia. Portanto, no exemplo acima, nosso localhost é autenticado no host4. Ou seja, nossas chaves localhost são usadas e a sessão de localhost para host4 é completamente criptografada.
Para tal possibilidade em ssh_config especifique a opção de configuração Proxy Jump. Se você precisar passar regularmente por vários hosts, a automação por meio da configuração economizará muito tempo.
21. Bloqueie tentativas de força bruta SSH usando iptables
Qualquer pessoa que tenha gerenciado um serviço SSH e analisado os logs sabe o número de tentativas de força bruta que ocorrem a cada hora de cada dia. Uma maneira rápida de reduzir o ruído nos logs é mover o SSH para uma porta não padrão. Faça alterações no arquivo sshd_config via parâmetro de configuração Porta##.
Com iptables Você também pode bloquear facilmente tentativas de conexão a uma porta ao atingir um determinado limite. Uma maneira fácil de fazer isso é usar OSSEC, porque ele não apenas bloqueia o SSH, mas também executa várias outras medidas de detecção de intrusões baseadas em nome de host (HIDS).
22. SSH Escape para alterar o encaminhamento de porta
E nosso último exemplo ssh projetado para alterar o encaminhamento de porta dinamicamente dentro de uma sessão existente ssh. Imagine este cenário. Você está profundamente envolvido na rede; talvez tenha pulado mais de meia dúzia de hosts e precise de uma porta local na estação de trabalho que seja encaminhada para o Microsoft SMB de um antigo sistema Windows 2003 (alguém se lembra do ms08-67?).
Clicando enter, tente entrar no console ~C. Esta é uma sequência de controle de sessão que permite fazer alterações em uma conexão existente.
Aqui você pode ver que encaminhamos nossa porta local 1445 para um host Windows 2003 que encontramos na rede interna. Agora é só correr msfconsole, e você pode seguir em frente (supondo que planeje usar este host).
Realização
Esses exemplos, dicas e comandos ssh deverá dar um ponto de partida; Mais informações sobre cada um dos comandos e capacidades estão disponíveis nas páginas man (man ssh, man ssh_config, man sshd_config).
Sempre fui fascinado pela capacidade de acessar sistemas e executar comandos em qualquer lugar do mundo. Ao desenvolver suas habilidades com ferramentas como ssh você se tornará mais eficaz em qualquer jogo que jogar.