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.
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.
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.
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.
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.
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.
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.
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.
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.
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).
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.
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 NmapSYN.
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.
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.
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.
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.
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.
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/.
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.
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.
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.
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.
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.