
Exemplos práticos , que levarão suas habilidades como administrador de sistemas remotos a um novo nível. Comandos e dicas ajudarão não apenas a utilizar SSH, mas também a navegar mais habilmente pela rede.
Conhecer alguns truques ssh é útil para qualquer administrador de sistemas, engenheiro de rede ou especialista em segurança.
Exemplos práticos de SSH
Primeiramente os fundamentos
Análise da linha de comando SSH
No próximo exemplo, são utilizados 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 informações de depuração é especialmente útil na análise de problemas de autenticação. Pode ser usado várias vezes para fornecer informações adicionais.- p 22: porta para se conectar a um servidor SSH remoto. Não é necessário especificar 22, pois este é o valor padrão, mas se o protocolo estiver em outra porta, deve-se especificá-la com o parâmetro-p. A porta de escuta é especificada no arquivosshd_configno formatoPort 2222.-C: compressão para a conexão. Se você possui uma conexão lenta ou está visualizando muito texto, isso pode acelerar a comunicação.neo@: a string antes do símbolo @ indica o nome do usuário para autenticação no servidor remoto. Se não for especificado, o nome do usuário da conta em que você está logado atualmente será usado por padrão (~$ whoami). O usuário também pode ser especificado pelo parâmetro--selector.remoteserver: nome do host ao qual está se conectandossh, pode ser um nome de domínio completo, um endereço IP ou qualquer host em um arquivo hosts local. Para conectar-se a um host que suporta tanto IPv4 quanto IPv6, você pode adicionar o parâmetro na linha de comando-4ou-6para uma resolução correta.
Todos os parâmetros mencionados acima são opcionais, exceto remoteserver.
Uso do 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. O valor padrão ~/.ssh/config, mas pode ser definido como um parâmetro para a opção -F.
Host *
Port 2222
Host remoteserver
HostName remoteserver.thematrix.io
User neo
Port 2112
IdentityFile /home/test/.ssh/remoteserver.private_keyNo exemplo acima, o arquivo de configuração ssh contém duas entradas de host. A primeira representa todos os hosts, para os quais a configuração Port 2222 se aplica. A segunda indica que para o host remoteserver deve ser usado um nome de usuário, porta, FQDN e IdentityFile diferentes.
O arquivo de configuração pode economizar muito tempo na digitação de caracteres, permitindo aplicar automaticamente configurações avançadas ao conectar-se a hosts específicos.
Cópia de arquivos via SSH usando SCP
O cliente SSH vem com outras duas ferramentas muito úteis para copiar arquivos via uma conexão ssh criptografada. Veja abaixo um exemplo de uso padrão dos comandos scp e sftp. Observe que muitos dos parâmetros para ssh também se aplicam a esses comandos.
localhost:~$ scp mypic.png neo@remoteserver:/media/data/mypic_2.pngNeste exemplo, o arquivo mypic.png foi copiado para remoteserver para a pasta /media/data e renomeado para mypic_2.png.
Não se esqueça da diferença no parâmetro de porta. Muitos caem nessa armadilha ao executar scp a partir da linha de comando. Aqui, o parâmetro de porta -P, e não -p, como no cliente ssh! Você pode esquecer, mas não se preocupe, todos esquecem.
Para aqueles que estão familiarizados com o console ftp, muitos dos comandos são semelhantes em sftp. Você pode fazer push, put e ls, conforme seu desejo.
sftp neo@remoteserverExemplos práticos
Em muitos desses exemplos, é possível alcançar resultados de diferentes maneiras. Como em todos os nossos e exemplos, a preferência é por exemplos práticos que simplesmente funcionam.
1. Proxy socks SSH
A função SSH Proxy número 1 é poderosa por um motivo justificado. Ela é mais robusta do que muitos supõem e oferece acesso a qualquer sistema que o servidor remoto consiga acessar, usando praticamente qualquer aplicativo. O cliente SSH pode redirecionar o tráfego através de um servidor proxy SOCKS com um simples comando. É importante compreender que o tráfego para sistemas remotos será originado do servidor remoto, conforme indicado nos logs do servidor web.
localhost:~$ ssh -D 8888 user@remoteserver
localhost:~$ netstat -pan | grep 8888
tcp 0 0 127.0.0.1:8888 0.0.0.0:* LISTEN 23880/sshAqui estamos iniciando um proxy SOCKS na porta TCP 8888, e o segundo comando verifica se a porta está ativa em modo de escuta. 127.0.0.1 indica que o serviço está funcionando apenas no localhost. Podemos usar um comando ligeiramente diferente para escutar em todas as interfaces, incluindo ethernet ou wifi, o que permitirá que outros aplicativos (como navegadores, etc.) em nossa rede se conectem ao serviço proxy através do proxy SOCKS SSH.
localhost:~$ ssh -D 0.0.0.0:8888 user@remoteserverAgora podemos configurar o navegador para se conectar ao proxy SOCKS. No Firefox, selecione Configurações | Geral | Configurações de Rede. Insira o endereço IP e a porta para a conexão.

Observe a opção na parte inferior do formulário para que as consultas DNS do navegador também passem pelo proxy SOCKS. Se você estiver usando um servidor proxy para criptografar o tráfego web na rede local, com certeza desejará marcar essa opção para que as consultas DNS sejam tunneling através da conexão SSH.
Ativando o proxy SOCKS no Chrome
Iniciar o Chrome com parâmetros de linha de comando específicos ativa o proxy SOCKS, assim como o tunneling de consultas DNS do navegador. Confie, mas verifique. Use para verificar se as consultas DNS não são mais visíveis.
localhost:~$ google-chrome --proxy-server="socks5://192.168.1.10:8888"Usando outros aplicativos com o proxy
Tenha em mente que muitos outros aplicativos também podem usar proxies SOCKS. O navegador web é apenas o mais popular entre eles. Alguns aplicativos possuem configurações para ativar o servidor proxy. Outros precisam de um pouco de ajuda de um aplicativo auxiliar. Por exemplo, permite executar o Microsoft RDP através do proxy SOCKS e outros.
localhost:~$ proxychains rdesktop $RemoteWindowsServerAs configurações do proxy SOCKS são definidas no arquivo de configuração do proxychains.
Dica: se você usa área de trabalho remota de Linux para Windows? Experimente o cliente . Esta é uma implementação mais moderna do que
rdesktop, com uma interação muito mais suave.
Usando SSH através de um proxy socks
Você está sentado em um café ou hotel — e precisa usar um Wi-Fi bastante instável. Localmente, do laptop, iniciamos um proxy SSH e estabelecemos um túnel SSH para a rede doméstica em um Raspberry Pi local. Usando o navegador ou outros aplicativos configurados para o proxy socks, podemos acessar quaisquer serviços de rede em nossa rede doméstica ou navegar na internet através da conexão de casa. Tudo entre o seu laptop e o servidor doméstico (via Wi-Fi e internet até em casa) é criptografado no túnel SSH.
2. Túnel SSH (redirecionamento de portas)
Na forma mais simples, um túnel SSH simplesmente abre uma porta em seu sistema local que se conecta a outra porta na outra extremidade do túnel.
localhost:~$ ssh -L 9999:127.0.0.1:80 user@remoteserver Vamos analisar o parâmetro -L. Ele pode ser visto como o lado local de escuta. Assim, no exemplo acima, a porta 9999 está sendo escutada no lado localhost e redirecionada pela porta 80 no remoteserver. Note que 127.0.0.1 refere-se ao localhost no servidor remoto!
Vamos subir um nível. No próximo exemplo, as portas de escuta são vinculadas a outros nós da rede local.
localhost:~$ ssh -L 0.0.0.0:9999:127.0.0.1:80 user@remoteserverNestes exemplos, estamos nos conectando a uma porta em um servidor web, mas isso pode ser um servidor proxy ou qualquer outro serviço TCP.
3. Túnel SSH para um host externo
Podemos usar os mesmos parâmetros para conectar o túnel de um servidor remoto a outro serviço em um terceiro sistema.
localhost:~$ ssh -L 0.0.0.0:9999:10.10.10.10:80 user@remoteserverNeste exemplo, estamos redirecionando o túnel do remoteserver para um servidor web que está rodando em 10.10.10.10. O tráfego do remoteserver para 10.10.10.10 já não está no túnel SSH. O servidor web em 10.10.10.10 vai considerar o remoteserver como a origem das requisições web.
4. Túnel SSH reverso
Aqui configuramos uma porta de escuta no servidor remoto, que se conectará de volta a uma porta local em nosso localhost (ou em outro sistema).
localhost:~$ ssh -v -R 0.0.0.0:1999:127.0.0.1:902 192.168.1.100 user@remoteserverNesta sessão SSH, uma conexão é estabelecida da porta 1999 no remoteserver para a porta 902 em nosso cliente local.
5. Proxy reverso SSH
Neste caso, estamos configurando um proxy socks na nossa conexão ssh, porém o proxy escuta na extremidade remota do servidor. As conexões para este proxy remoto agora aparecem do túnel como tráfego da nossa localhost.
localhost:~$ ssh -v -R 0.0.0.0:1999 192.168.1.100 user@remoteserverSolução de problemas com túneis SSH remotos
Se você tiver problemas com as opções remotas do SSH, verifique usando netstat, a quais outras interfaces a porta de escuta está conectada. Embora tenhamos especificado 0.0.0.0 nos exemplos, se o valor GatewayPorts em sshd_config estiver definido como não, o listener será vinculado apenas à localhost (127.0.0.1).
Aviso de segurança
Observe que ao abrir túneis e proxies socks, recursos de rede internos podem ser acessíveis por redes não confiáveis (por exemplo, a internet!). Isso pode representar uma séria ameaça à segurança, portanto, certifique-se de entender o que é o listener e quais acessos ele tem.
6. Configuração de VPN via SSH
Um termo comum entre especialistas em métodos de ataque (pentesters e outros) é "ponto de apoio na rede". Após estabelecer uma conexão em um sistema, esse sistema torna-se um gateway para acesso adicional à rede. O ponto de apoio permite expandir o movimento.
Para tal ponto de apoio, podemos usar um proxy SSH e proxychains, porém existem algumas limitações. Por exemplo, não será possível trabalhar diretamente com sockets, então não conseguiremos escanear portas dentro da rede através de e muitos outros. Mas a questão é outra,.
Usando esta opção de VPN mais avançada, a conexão é reduzida para nível 3. Em seguida, podemos simplesmente direcionar o tráfego através do túnel, utilizando a roteação de rede padrão.
O método utiliza ssh, iptables, interfaces tun e roteação.
Primeiro, precisamos definir esses parâmetros em sshd_config. Como estamos fazendo alterações nas interfaces tanto do sistema remoto quanto do cliente, precisamos de permissões de root em ambos os lados.
PermitRootLogin yes
PermitTunnel yesEm seguida, estabeleceremos a conexão ssh usando o parâmetro que solicita a inicialização dos dispositivos tun.
localhost:~# ssh -v -w any root@remoteserver Agora devemos ter um dispositivo tun ao mostrar as interfaces (# ip a). O próximo passo adicionará endereços IP às interfaces de 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 upLado 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 um caminho direto para outro host (route -n e ping 10.10.10.10).
É possível 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 Do lado remoto, é necessário ativar ip_forward e iptables.
remoteserver:~# echo 1 > /proc/sys/net/ipv4/ip_forward
remoteserver:~# iptables -t nat -A POSTROUTING -s 10.10.10.2 -o enp7s0 -j MASQUERADEBoom! VPN através de túnel SSH no nível de rede 3. Isto já é uma vitória.
Se surgirem problemas, use e ping, para identificar a causa. Como estamos operando no nível 3, nossos pacotes ICMP passarão por este túnel.
7. Copiando a chave SSH (ssh-copy-id)
Existem várias maneiras, mas este comando economiza tempo para não copiar arquivos manualmente. Ele simplesmente copia ~/ .ssh / id_rsa.pub (ou a chave padrão) do seu sistema para ~/ .ssh / authorized_keys no servidor remoto.
localhost:~$ ssh-copy-id user@remoteserver
8. Execução remota de comandos (não interativa)
O comando ssh pode ser vinculado a outros comandos para uma interface comum conveniente. Basta adicionar o comando que você deseja executar no host remoto como o último parâmetro entre aspas.
localhost:~$ ssh remoteserver "cat /var/log/nginx/access.log" | grep badstuff.php Neste exemplo grep é executado no sistema local depois que o log foi baixado pelo canal ssh. Se o arquivo for grande, é mais fácil executar grep do lado remoto, apenas envolvendo ambos os comandos entre aspas.
Outro exemplo executa a mesma função que ssh-copy-id do exemplo 7.
localhost:~$ cat ~/ .ssh / id_rsa.pub | ssh remoteserver 'cat >> .ssh / authorized_keys'
9. Captura remota de pacotes e visualização no Wireshark
Peguei um dos nossos . Use-o para capturar pacotes remotamente, com a saída diretamente na GUI do Wireshark local.
:~$ 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 truque elegante que comprime a pasta usando bzip2 (este é o parâmetro -j no comando tar), e então extrai o fluxo bzip2 do outro lado, criando um duplicado da pasta no servidor remoto.
localhost:~$ tar -cvj /datafolder | ssh remoteserver "tar -xj -C /datafolder"
11. Aplicativos GUI remotos com redirecionamento SSH X11
Se o cliente e o servidor remoto tiverem 'X', é possível executar remotamente um comando GUI, com a janela no seu desktop local. Essa função existe há muito tempo, mas ainda é muito útil. Execute um navegador da web remoto ou até mesmo um console do VMWare Workstation, como eu faço neste exemplo.
localhost:~$ ssh -X remoteserver vmware É necessária uma linha X11Forwarding yes no arquivo sshd_config.
12. Cópia remota de arquivos usando rsync e SSH
rsync é muito mais conveniente scp, se for necessário fazer backups periódicos de diretórios, uma grande quantidade de arquivos ou arquivos muito grandes. Existe uma função de recuperação após falha de transferência e cópia apenas dos arquivos modificados, o que economiza tráfego e tempo.
Neste exemplo, é utilizada a compressão gzip (-z) e o modo de arquivamento (-a), que inclui cópia recursiva.
:~$ rsync -az /home/testuser/data remoteserver:backup/
13. SSH através da rede Tor
A rede anônima Tor pode tunelizar tráfego SSH usando o comando torsocks. O próximo comando irá rotear um proxy ssh através do Tor.
localhost:~$ torsocks ssh myuntracableuser@remoteserverusará a porta 9050 no localhost como proxy. Como sempre ao usar o Tor, é necessário verificar cuidadosamente qual tráfego está sendo tunelizado e outras questões de segurança operacional (opsec). Para onde vão suas solicitações DNS?
14. SSH para uma instância EC2
Para conectar-se a uma instância EC2, é necessário ter uma chave privada. Baixe-a (extensão .pem) do painel de controle do Amazon EC2 e altere as permissões (chmod 400 my-ec2-ssh-key.pem). Armazene a chave em um local seguro ou coloque-a na sua pasta ~/ .ssh/.
localhost:~$ ssh -i ~/ .ssh/ my-ec2-key.pem ubuntu@my-ec2-public Parâmetro -i simplesmente instrui o cliente ssh a usar esta chave. O arquivo ~/.ssh/config é ideal para configurar automaticamente o uso da chave ao conectar-se ao host ec2.
Host my-ec2-public
Hostname ec2???.compute-1.amazonaws.com
User ubuntu
IdentityFile ~/ .ssh/ my-ec2-key.pem
15. Edição de arquivos de texto com VIM via ssh/scp
Para todos os amantes do vim essa dica vai economizar algum tempo. Com o vim os arquivos são editados por scp com um único comando. Este método simplesmente cria o arquivo localmente em /tmp, e 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. Após o host temos uma dupla //. Isso se refere ao caminho absoluto. Uma barra significa um caminho relativo à pasta inicial tinham endereços de e-mail em domínios.
**warning** (netrw) cannot determine method (format: protocol://[user@]hostname[:port]/[path])Se você ver esse erro, verifique novamente o formato do comando. Normalmente isso indica um erro de sintaxe.
16. Montando um SSH remoto como uma pasta local com SSHFS
Com o 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 No Ubuntu e Debian, vamos instalar o pacote sshfs, e então simplesmente montaremos a localização remota em nosso sistema.
localhost:~$ sshfs user@remoteserver:/media/data ~/data/
17. Multiplexação SSH usando ControlPath
Por padrão, ao ter uma conexão existente com um servidor remoto usando ssh a segunda conexão usando ssh ou scp estabelece uma nova sessão com autenticação adicional. A opção ControlPath permite usar a sessão existente para todas as conexões subsequentes. Isso acelera significativamente o processo: o efeito é notável mesmo em uma rede local, e ainda mais ao se conectar a recursos remotos.
Host remoteserver
HostName remoteserver.example.org
ControlMaster auto
ControlPath ~/.ssh/control/%r@%h:%p
ControlPersist 10m ControlPath indica o socket para verificar novas conexões quanto à existência de uma sessão ativa ssh. A última opção significa que, mesmo após sair do console, a sessão existente permanecerá aberta por 10 minutos, permitindo que você se reconecte durante esse tempo pelo socket existente. Para mais informações, consulte a ajuda ssh_config man.
18. Streaming de vídeo via SSH com VLC e SFTP
Mesmo usuários antigos ssh e vlc (Video Lan Client) nem sempre sabem sobre esta opção conveniente quando é realmente necessário assistir a um vídeo pela rede. Nas configurações File | Open Network Stream programa vlc você pode inserir o local como sftp://. Se uma senha for necessária, uma solicitação será exibida.
sftp://remoteserver//media/uploads/myvideo.mkv
19. Autenticação de dois fatores
A mesma autenticação de dois fatores que você tem para sua conta bancária ou conta do Google se aplica ao serviço SSH.
Claro, ssh originalmente possui a função de autenticação de dois fatores, que envolve uma senha e uma chave SSH. A vantagem de um token de hardware ou do aplicativo Google Authenticator é que normalmente é um dispositivo físico diferente.
Veja nosso guia de 8 minutos sobre .
20. Pulando entre hosts com ssh e -J
Se, devido à segmentação da rede, for necessário passar por vários hosts ssh para chegar à rede de destino final, o atalho -J economizará tempo.
localhost:~$ ssh -J host1,host2,host3 user@host4.internal Aqui, o principal é entender que isso não é equivalente ao comando ssh host1, então user@host1:~$ ssh host2 O parâmetro -J utiliza de forma inteligente o redirecionamento para que o localhost estabeleça uma sessão com o próximo host na cadeia. Assim, no exemplo acima, nosso localhost se autentica no host4. Ou seja, usamos nossas chaves do localhost e a sessão do localhost para o host4 está completamente criptografada.
Para essa funcionalidade em ssh_config especifique a opção de configuração ProxyJump. Se você precisar constantemente saltar entre vários hosts, a automação através da configuração economizará muito tempo.
21. Bloqueio de tentativas de força bruta SSH com iptables
Qualquer pessoa que já gerenciou um serviço SSH e analisou os logs sabe quantas tentativas de força bruta ocorrem a cada hora, todos os dias. Uma maneira rápida de reduzir o ruído nos logs é mover o SSH para uma porta não padrão. Faça as alterações no arquivo sshd_config usando o parâmetro de configuração Port##.
Com iptables também é possível bloquear facilmente as tentativas de conexão à porta após atingir um certo limiar. Uma maneira simples de fazer isso é usar , pois ele não apenas bloqueia o SSH, mas realiza várias outras medidas de detecção de intrusões baseadas em nome de host (HIDS).
22. Escape SSH para alterar o redirecionamento de portas
E nosso último exemplo ssh destina-se a alterar o redirecionamento de portas dinamicamente dentro de uma sessão existente. sshImagine o seguinte cenário. Você está profundamente na rede; talvez tenha saltado através de meia dúzia de hosts e precisa de uma porta local em sua estação de trabalho que seja redirecionada para o Microsoft SMB de um antigo sistema Windows 2003 (alguém se lembra do ms08-67?).
Pressione enter, tente inserir no console ~C. Essa é uma sequência de controle na sessão que permite fazer alterações na conexão existente.
localhost:~$ ~C
ssh> -h
Comandos:
-L[bind_address:]port:host:hostport Solicitar encaminhamento local
-R[bind_address:]port:host:hostport Solicitar encaminhamento remoto
-D[bind_address:]port Solicitar encaminhamento dinâmico
-KL[bind_address:]port Cancelar encaminhamento local
-KR[bind_address:]port Cancelar encaminhamento remoto
-KD[bind_address:]port Cancelar encaminhamento dinâmico
ssh> -L 1445:remote-win2k3:445
Encaminhando porta. Aqui você pode ver que redirecionamos nossa porta local 1445 para o host Windows 2003 que encontramos na rede interna. Agora basta iniciar msfconsole, e você poderá prosseguir (supondo que você planeja usar esse host).
Conclusão
Esses exemplos, dicas e comandos ssh devem fornecer um ponto de partida; informações adicionais sobre cada um dos comandos e recursos estão disponíveis nas páginas de referência (man ssh, man ssh_config, Sempre me fascinou a possibilidade de acessar sistemas e executar comandos de qualquer lugar do mundo. Ao desenvolver minhas habilidades com ferramentas como).
você se tornará mais eficiente em qualquer jogo que jogar. ssh 🥇Dicas práticas, exemplos e túneis SSH | ProHoster
Fonte: habr.com
