Consellos prácticos, exemplos e túneles SSH

Consellos prácticos, exemplos e túneles SSH
Exemplos prácticos SSH, que levará as túas habilidades como administrador de sistemas remotos a un novo nivel. Comandos e consellos non só axudarán a usar SSH, pero tamén navegar pola rede de forma máis competente.

Coñecendo algúns trucos ssh útil para calquera administrador de sistemas, enxeñeiro de rede ou especialista en seguridade.

Exemplos prácticos de SSH

  1. Proxy de calcetíns SSH
  2. Túnel SSH (reenvío de portos)
  3. Túnel SSH para o terceiro host
  4. Túnel SSH inverso
  5. Proxy inverso SSH
  6. Instalando VPN sobre SSH
  7. Copiando unha chave SSH (ssh-copy-id)
  8. Execución de comandos remotos (non interactivo)
  9. Captura e visualización remota de paquetes en Wireshark
  10. Copiando un cartafol local nun servidor remoto mediante SSH
  11. Aplicacións GUI remotas con reenvío SSH X11
  12. Copia remota de ficheiros mediante rsync e SSH
  13. SSH a través da rede Tor
  14. Instancia de SSH a EC2
  15. Editar ficheiros de texto usando VIM mediante ssh/scp
  16. Monte SSH remoto como cartafol local con SSHFS
  17. Multiplexación de SSH con ControlPath
  18. Transmite vídeo a través de SSH usando VLC e SFTP
  19. Autenticación de dous factores
  20. Saltando hosts con SSH e -J
  21. Bloqueo de intentos de forza bruta SSH usando iptables
  22. SSH Escape para cambiar o reenvío de portos

Primeiro o básico

Analizando a liña de comandos SSH

O seguinte exemplo usa parámetros comúns que adoitan atoparse ao conectarse a un servidor remoto SSH.

localhost:~$ ssh -v -p 22 -C neo@remoteserver

  • -v: A saída de depuración é especialmente útil cando se analizan problemas de autenticación. Pódese usar varias veces para mostrar información adicional.
  • - p 22: porto de conexión a un servidor SSH remoto. 22 non ten que ser especificado, porque este é o valor predeterminado, pero se o protocolo está nalgún outro porto, entón especificámolo usando o parámetro -p. O porto de escoita especifícase no ficheiro sshd_config no formato Port 2222.
  • -C: Compresión para conexión. Se tes unha conexión lenta ou ves moito texto, isto pode acelerar a conexión.
  • neo@: A liña antes do símbolo @ indica o nome de usuario para a autenticación no servidor remoto. Se non o especificas, por defecto será o nome de usuario da conta na que estás iniciado sesión (~$whoami). Tamén se pode especificar o usuario mediante o parámetro -l.
  • remoteserver: nome do host ao que se conectar ssh, este pode ser un nome de dominio totalmente cualificado, un enderezo IP ou calquera host do ficheiro local hosts. Para conectarse a un host que admita IPv4 e IPv6, pode engadir o parámetro á liña de comandos -4 ou -6 para a correcta resolución.

Todos os parámetros anteriores son opcionais excepto remoteserver.

Usando o ficheiro de configuración

Aínda que moitos están familiarizados co ficheiro sshd_config, tamén hai un ficheiro de configuración do cliente para o comando ssh. Valor predeterminado ~/.ssh/config, pero pódese definir como un parámetro para unha opción -F.

Host *
     Port 2222

Host remoteserver
     HostName remoteserver.thematrix.io
     User neo
     Port 2112
     IdentityFile /home/test/.ssh/remoteserver.private_key

Hai dúas entradas de host no ficheiro de configuración ssh de exemplo anterior. O primeiro significa todos os hosts, todos usando o parámetro de configuración Port 2222. O segundo di que para o host servidor remoto debe utilizarse un nome de usuario, porto, FQDN e IdentityFile diferentes.

Un ficheiro de configuración pode aforrar moito tempo ao escribir ao permitir que a configuración avanzada se aplique automaticamente ao conectarse a hosts específicos.

Copiando ficheiros a través de SSH usando SCP

O cliente SSH inclúe outras dúas ferramentas moi útiles para copiar ficheiros conexión ssh cifrada. Vexa a continuación un exemplo de uso estándar dos comandos scp e sftp. Teña en conta que moitas das opcións ssh tamén se aplican a estes comandos.

localhost:~$ scp mypic.png neo@remoteserver:/media/data/mypic_2.png

Neste exemplo o ficheiro mypic.png copiado a servidor remoto á carpeta /media/data e renomeado por mypic_2.png.

Non esquezas a diferenza no parámetro do porto. Aquí é onde moitas persoas son atrapadas cando lanzan scp desde a liña de comandos. Aquí está o parámetro do porto -Ppero non -p, igual que nun cliente ssh! Esquecerás, pero non te preocupes, todo o mundo esquece.

Para aqueles que están familiarizados coa consola ftp, moitos dos comandos son similares en sftp. Podes facer empuxar, poñer и lscomo o corazón desexa.

sftp neo@remoteserver

Exemplos prácticos

En moitos destes exemplos, os resultados pódense conseguir mediante diferentes métodos. Como en todos os nosos libros de texto e exemplos, dáse preferencia aos exemplos prácticos que simplemente fan o seu traballo.

1. Proxy de calcetíns SSH

A función SSH Proxy é a número 1 por unha boa razón. É máis potente do que moitos pensan e dáche acceso a calquera sistema ao que teña acceso o servidor remoto, usando practicamente calquera aplicación. Un cliente ssh pode realizar un túnel de tráfico a través dun proxy SOCKS cun simple comando. É importante entender que o tráfico a sistemas remotos procederá dun servidor remoto, isto indicarase nos rexistros 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/ssh

Aquí executamos un proxy de calcetíns no porto TCP 8888, o segundo comando comproba que o porto está activo no modo de escoita. 127.0.0.1 indica que o servizo só se executa en localhost. Podemos usar un comando lixeiramente diferente para escoitar en todas as interfaces, incluíndo ethernet ou wifi, isto permitirá que outras aplicacións (navegadores, etc.) da nosa rede se conecten ao servizo proxy a través do proxy ssh socks.

localhost:~$ ssh -D 0.0.0.0:8888 user@remoteserver

Agora podemos configurar o navegador para conectarse ao proxy de calcetíns. En Firefox, selecciona Configuración | Básico | Configuración da rede. Especifique o enderezo IP e o porto para conectarse.

Consellos prácticos, exemplos e túneles SSH

Ten en conta a opción na parte inferior do formulario para que as solicitudes de DNS do teu navegador pasen tamén por un proxy SOCKS. Se está a usar un servidor proxy para cifrar o tráfico web na súa rede local, probablemente quererá seleccionar esta opción para que as solicitudes de DNS sexan tunelizadas a través da conexión SSH.

Activando o proxy de calcetíns en Chrome

Ao iniciar Chrome con certos parámetros de liña de comandos habilitará o proxy de calcetíns, así como as solicitudes de túnel de DNS do navegador. Confía pero verifica. Use tcpdump para comprobar que as consultas DNS xa non son visibles.

localhost:~$ google-chrome --proxy-server="socks5://192.168.1.10:8888"

Usando outras aplicacións cun proxy

Teña en conta que moitas outras aplicacións tamén poden usar proxies de calcetíns. O navegador web é simplemente o máis popular de todos. Algunhas aplicacións teñen opcións de configuración para activar un servidor proxy. Outros necesitan un pouco de axuda cun programa auxiliar. Por exemplo, cadeas proxy permítelle executar un proxy de calcetíns Microsoft RDP, etc.

localhost:~$ proxychains rdesktop $RemoteWindowsServer

Os parámetros de configuración do proxy de Socks están definidos no ficheiro de configuración de proxychains.

Consello: se usa o escritorio remoto desde Linux en Windows? Proba co cliente FreeRDP. Esta é unha implementación máis moderna que rdesktop, cunha experiencia moito máis suave.

Opción para usar SSH a través do proxy de calcetíns

Estás sentado nunha cafetería ou nun hotel e estás obrigado a usar unha wifi pouco fiable. Lanzamos un proxy ssh localmente desde un portátil e instalamos un túnel ssh na rede doméstica nun Rasberry Pi local. Usando un navegador ou outras aplicacións configuradas para un proxy de calcetíns, podemos acceder a calquera servizo de rede da nosa rede doméstica ou acceder a Internet a través da nosa conexión doméstica. Todo o que hai entre o teu portátil e o teu servidor doméstico (a través de Wi-Fi e internet ata a túa casa) está cifrado nun túnel SSH.

2. Túnel SSH (reenvío de portos)

Na súa forma máis sinxela, un túnel SSH simplemente abre un porto no seu sistema local que se conecta a outro porto no outro extremo do túnel.

localhost:~$ ssh  -L 9999:127.0.0.1:80 user@remoteserver

Vexamos o parámetro -L. Pódese considerar como o lado local da escoita. Polo tanto, no exemplo anterior, o porto 9999 escoita no host local e envíase a través do porto 80 ao servidor remoto. Teña en conta que 127.0.0.1 refírese a localhost no servidor remoto!

Subamos o chanzo. O seguinte exemplo comunica os portos de escoita con outros anfitrións da rede local.

localhost:~$ ssh  -L 0.0.0.0:9999:127.0.0.1:80 user@remoteserver

Nestes exemplos estamos conectándonos a un porto do servidor web, pero este podería ser un servidor proxy ou calquera outro servizo TCP.

3. Túnel SSH a un host de terceiros

Podemos usar os mesmos parámetros para conectar un túnel desde un servidor remoto a outro servizo que se executa nun terceiro sistema.

localhost:~$ ssh  -L 0.0.0.0:9999:10.10.10.10:80 user@remoteserver

Neste exemplo, estamos redirixindo un túnel do servidor remoto a un servidor web que se executa en 10.10.10.10. Tráfico desde o servidor remoto ata 10.10.10.10 xa non está no túnel SSH. O servidor web do 10.10.10.10 considerará que o servidor remoto é a fonte das solicitudes web.

4. Túnel SSH inverso

Aquí configuraremos un porto de escoita no servidor remoto que se conectará de novo ao porto local do noso host local (ou outro sistema).

localhost:~$ ssh -v -R 0.0.0.0:1999:127.0.0.1:902 192.168.1.100 user@remoteserver

Esta sesión SSH establece unha conexión desde o porto 1999 do servidor remoto ata o porto 902 do noso cliente local.

5. Proxy inverso SSH

Neste caso, estamos configurando un proxy de calcetíns na nosa conexión ssh, pero o proxy está escoitando no extremo remoto do servidor. As conexións a este proxy remoto agora aparecen desde o túnel como tráfico do noso host local.

localhost:~$ ssh -v -R 0.0.0.0:1999 192.168.1.100 user@remoteserver

Solución de problemas cos túneles SSH remotos

Se tes problemas co funcionamento das opcións SSH remotas, consulta con netstat, a que outras interfaces está conectado o porto de escoita. Aínda que indicamos 0.0.0.0 nos exemplos, pero se o valor GatewayPorts в sshd_config configurado en non, entón o oínte estará ligado só a localhost (127.0.0.1).

Aviso de seguridade

Teña en conta que ao abrir túneles e proxies de calcetíns, os recursos internos da rede poden ser accesibles para redes non fiables (como Internet!). Isto pode ser un serio risco de seguridade, así que asegúrate de comprender cal é o oínte e a que ten acceso.

6. Instalación de VPN a través de SSH

O termo común entre os especialistas en métodos de ataque (pentesters, etc.) é "un punto de apoio na rede". Unha vez que se establece unha conexión nun sistema, ese sistema convértese na pasarela para un acceso adicional á rede. Un fulcro que permite moverse en amplitude.

Para tal punto de apoio podemos usar un proxy SSH e cadeas proxy, non obstante, hai algunhas limitacións. Por exemplo, non será posible traballar directamente con sockets, polo que non poderemos escanear portos dentro da rede a través de Nmap SYN.

Usando esta opción VPN máis avanzada, a conexión redúcese a nivel 3. Despois podemos simplemente enrutar o tráfico a través do túnel usando o enrutamento de rede estándar.

O método utiliza ssh, iptables, tun interfaces e enrutamento.

Primeiro cómpre configurar estes parámetros sshd_config. Xa que estamos a facer cambios nas interfaces dos sistemas remotos e dos clientes, nós necesitan dereitos de root en ambos os dous lados.

PermitRootLogin yes
PermitTunnel yes

Despois estableceremos unha conexión ssh mediante o parámetro que solicita a inicialización dos dispositivos tun.

localhost:~# ssh -v -w any root@remoteserver

Agora deberíamos ter un dispositivo sintonizado ao mostrar interfaces (# ip a). O seguinte paso engadirá enderezos 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 unha ruta directa a outro host (route -n и ping 10.10.10.10).

Podes dirixir calquera subrede a través dun host do outro lado.

localhost:~# route add -net 10.10.10.0 netmask 255.255.255.0 dev tun0

No lado remoto debes activalo ip_forward и iptables.

remoteserver:~# echo 1 > /proc/sys/net/ipv4/ip_forward
remoteserver:~# iptables -t nat -A POSTROUTING -s 10.10.10.2 -o enp7s0 -j MASQUERADE

Estrondo! VPN sobre túnel SSH na capa de rede 3. Agora iso é unha vitoria.

Se ocorre algún problema, use tcpdump и pingpara determinar a causa. Xa que estamos xogando na capa 3, os nosos paquetes icmp pasarán por este túnel.

7. Copia a clave SSH (ssh-copy-id)

Hai varias formas de facelo, pero este comando aforra tempo ao non copiar os ficheiros manualmente. Simplemente copia ~/.ssh/id_rsa.pub (ou a chave predeterminada) do teu sistema a ~/.ssh/authorized_keys nun servidor remoto.

localhost:~$ ssh-copy-id user@remoteserver

8. Execución de comandos remotos (non interactivo)

equipo ssh Pódese ligar a outros comandos para obter unha interface común e amigable. Só ten que engadir o comando que quere executar no host remoto como último parámetro entre comiñas.

localhost:~$ ssh remoteserver "cat /var/log/nginx/access.log" | grep badstuff.php

Neste exemplo grep executado no sistema local despois de que o rexistro fose descargado a través da canle ssh. Se o ficheiro é grande, é máis cómodo executalo grep no lado remoto simplemente encerrando ambos os comandos entre comiñas dobres.

Outro exemplo realiza a mesma función que ssh-copy-id do exemplo 7.

localhost:~$ cat ~/.ssh/id_rsa.pub | ssh remoteserver 'cat >> .ssh/authorized_keys'

9. Captura e visualización remota de paquetes en Wireshark

Tomei un dos nosos exemplos de tcpdump. Utilízao para capturar paquetes de forma remota e mostrar os resultados directamente na GUI local de Wireshark.

:~$ ssh root@remoteserver 'tcpdump -c 1000 -nn -w - not port 22' | wireshark -k -i -

10. Copiando un cartafol local nun servidor remoto mediante SSH

Un bonito truco que comprime un cartafol usando bzip2 (esta é a opción -j no comando tar), e despois recupera o fluxo bzip2 por outro lado, creando un cartafol duplicado no servidor remoto.

localhost:~$ tar -cvj /datafolder | ssh remoteserver "tar -xj -C /datafolder"

11. Aplicacións GUI remotas con reenvío SSH X11

Se X está instalado no cliente e no servidor remoto, pode executar remotamente un comando GUI cunha xanela no seu escritorio local. Esta función existe desde hai moito tempo, pero aínda é moi útil. Inicie un navegador web remoto ou mesmo a consola VMWawre Workstation como fago neste exemplo.

localhost:~$ ssh -X remoteserver vmware

Cadea obrigatoria X11Forwarding yes en arquivo sshd_config.

12. Copia remota de ficheiros mediante rsync e SSH

rsync moito máis cómodo scp, se precisa copias de seguridade periódicas dun directorio, un gran número de ficheiros ou ficheiros moi grandes. Hai unha función para recuperarse dunha falla de transferencia e copiar só os ficheiros modificados, o que aforra tráfico e tempo.

Este exemplo usa compresión gzip (-z) e modo de arquivo (-a), que permite a copia recursiva.

:~$ rsync -az /home/testuser/data remoteserver:backup/

13. SSH a través da rede Tor

A rede Tor anónima pode túnel de tráfico SSH usando o comando torsocks. O seguinte comando pasará o proxy ssh a través de Tor.

localhost:~$ torsocks ssh myuntracableuser@remoteserver

Torsocos usará o porto 9050 no host local para o proxy. Como sempre, ao usar Tor, cómpre comprobar seriamente o tráfico que se está a tunelizar e outros problemas de seguridade operativa (opsec). Onde van as túas consultas de DNS?

14. Instancia de SSH a EC2

Para conectarse a unha instancia EC2, necesitas unha chave privada. Descárgueo (extensión .pem) desde o panel de control de Amazon EC2 e cambie os permisos (chmod 400 my-ec2-ssh-key.pem). Garda a chave nun lugar seguro ou colócaa no teu propio cartafol ~/.ssh/.

localhost:~$ ssh -i ~/.ssh/my-ec2-key.pem ubuntu@my-ec2-public

Parámetro -i simplemente dille ao cliente ssh que use esta chave. Arquivo ~/.ssh/config Ideal para configurar automaticamente o uso da chave ao conectarse a un host ec2.

Host my-ec2-public
   Hostname ec2???.compute-1.amazonaws.com
   User ubuntu
   IdentityFile ~/.ssh/my-ec2-key.pem

15. Editar ficheiros de texto usando VIM mediante ssh/scp

Para todos os amantes vim Este consello aforrará tempo. Mediante o uso vim Os ficheiros edítanse mediante scp cun só comando. Este método simplemente crea o ficheiro localmente en /tmpe despois cópiao unha vez que o gardamos vim.

localhost:~$ vim scp://user@remoteserver//etc/hosts

Nota: o formato é lixeiramente diferente do habitual scp. Despois do anfitrión temos o dobre //. Esta é unha referencia de camiño absoluta. Unha barra indicará un camiño relativo ao cartafol de inicio users.

**warning** (netrw) cannot determine method (format: protocol://[user@]hostname[:port]/[path])

Se ves este erro, comprobe o formato do comando. Isto xeralmente significa un erro de sintaxe.

16. Montar un SSH remoto como cartafol local con SSHFS

Por medio de sshfs - cliente do sistema de ficheiros ssh - podemos conectar un directorio local a unha localización remota con todas as interaccións de ficheiros nunha sesión cifrada ssh.

localhost:~$ apt install sshfs

Instala o paquete en Ubuntu e Debian sshfs, e despois simplemente monte a localización remota no noso sistema.

localhost:~$ sshfs user@remoteserver:/media/data ~/data/

17. Multiplexación SSH con ControlPath

De forma predeterminada, se existe unha conexión a un servidor remoto usando ssh segunda conexión usando ssh ou scp establece unha nova sesión con autenticación adicional. Opción ControlPath permite que a sesión existente se utilice para todas as conexións posteriores. Isto acelerará significativamente o proceso: o efecto é perceptible incluso nunha rede local, e máis aínda cando se conecta a recursos remotos.

Host remoteserver
        HostName remoteserver.example.org
        ControlMaster auto
        ControlPath ~/.ssh/control/%r@%h:%p
        ControlPersist 10m

ControlPath especifica o socket para comprobar novas conexións para ver se hai unha sesión activa ssh. A última opción significa que mesmo despois de saír da consola, a sesión existente permanecerá aberta durante 10 minutos, polo que durante este tempo podes volver conectarte ao socket existente. Para obter máis información, consulte a axuda. ssh_config man.

18. Transmite vídeo a través de SSH usando VLC e SFTP

Mesmo usuarios de longa data ssh и vlc (Vídeo Lan Client) non sempre son conscientes desta opción conveniente cando realmente precisa ver un vídeo a través da rede. En configuración Ficheiro | Abre o fluxo de rede programas vlc podes introducir a localización como sftp://. Se se require un contrasinal, aparecerá unha solicitude.

sftp://remoteserver//media/uploads/myvideo.mkv

19. Autenticación de dous factores

Ao servizo SSH aplícase a mesma autenticación de dous factores que a túa conta bancaria ou conta de Google.

Por suposto, ssh inicialmente ten unha función de autenticación de dous factores, o que significa un contrasinal e unha clave SSH. A vantaxe dun token de hardware ou da aplicación Google Authenticator é que adoita ser un dispositivo físico diferente.

Consulta a nosa guía de 8 minutos usando Google Authenticator e SSH.

20. Saltando hosts con ssh e -J

Se a segmentación da rede significa que tes que pasar por varios hosts ssh para chegar á rede de destino final, o atallo -J aforrarache tempo.

localhost:~$ ssh -J host1,host2,host3 [email protected]

O principal que hai que entender aquí é que isto non é o mesmo que o comando ssh host1, entón user@host1:~$ ssh host2 etc. A opción -J usa intelixentemente o reenvío para forzar localhost a establecer unha sesión co seguinte host da cadea. Polo tanto, no exemplo anterior, o noso localhost está autenticado en host4. É dicir, utilízanse as nosas chaves de localhost e a sesión de localhost a host4 está completamente cifrada.

Para tal posibilidade en ssh_config especificar a opción de configuración ProxyJump. Se tes que pasar regularmente por varios hosts, a automatización mediante a configuración aforrará moito tempo.

21. Bloquear intentos de forza bruta SSH usando iptables

Calquera persoa que xestionou un servizo SSH e mirou os rexistros sabe sobre o número de intentos de forza bruta que se producen cada hora de cada día. Unha forma rápida de reducir o ruído nos rexistros é mover SSH a un porto non estándar. Fai cambios no ficheiro sshd_config mediante un parámetro de configuración Porto##.

Con iptables Tamén pode bloquear facilmente os intentos de conexión a un porto ao alcanzar un determinado limiar. Unha forma sinxela de facelo é usar OSSEC, porque non só bloquea SSH, senón que fai outras medidas de detección de intrusións (HIDS) baseada en nomes de host.

22. SSH Escape para cambiar o reenvío de portos

E o noso último exemplo ssh deseñado para cambiar o reenvío de portos sobre a marcha dentro dunha sesión existente ssh. Imaxina este escenario. Estás no fondo da rede; quizais saltou máis de media ducia de hosts e necesite un porto local na estación de traballo que se reenvíe á SMB de Microsoft dun antigo sistema Windows 2003 (alguén lembra ms08-67?).

Facendo clic enter, tenta entrar na consola ~C. Esta é unha secuencia de control de sesión que permite facer cambios nunha conexión existente.

localhost:~$ ~C
ssh> -h
Commands:
      -L[bind_address:]port:host:hostport    Request local forward
      -R[bind_address:]port:host:hostport    Request remote forward
      -D[bind_address:]port                  Request dynamic forward
      -KL[bind_address:]port                 Cancel local forward
      -KR[bind_address:]port                 Cancel remote forward
      -KD[bind_address:]port                 Cancel dynamic forward
ssh> -L 1445:remote-win2k3:445
Forwarding port.

Aquí podes ver que reenviamos o noso porto local 1445 a un servidor Windows 2003 que atopamos na rede interna. Agora só corre msfconsole, e podes seguir adiante (asumindo que planeas usar este host).

Realización

Estes exemplos, consellos e comandos ssh debe dar un punto de partida; Máis información sobre cada un dos comandos e capacidades está dispoñible nas páxinas de manual (man ssh, man ssh_config, man sshd_config).

Sempre me fascinou a posibilidade de acceder a sistemas e executar comandos en calquera lugar do mundo. Ao desenvolver as túas habilidades con ferramentas como ssh serás máis eficaz en calquera xogo que xogues.

Fonte: www.habr.com

Engadir un comentario