SSH

SSH SSH

SSHlink image 50

Introdução históricalink image 51

Este caderno foi traduzido automaticamente para torná-lo acessível a mais pessoas, por favor me avise se você vir algum erro de digitação..

Nos primeiros tempos da Internet, o protocolo "rede" foi criado para poder se comunicar entre vários computadores, mas tinha o problema de não ser criptografado, de modo que qualquer um que se atravessasse no caminho poderia ler a comunicação sem qualquer problema, por isso foi criado o "SSH" (Secure Shell).

SSH criptografialink image 52

O sistema de codificação SSH funciona com base em uma chave pública/chave privada, de modo que se a comunicação for criptografada com uma das duas chaves, ela só poderá ser descriptografada pela outra chave.

E por que existe uma chave pública e uma chave privada? A chave pública é aquela que você dá a todos e a chave privada é aquela que só você tem que possuir.

Portanto, se você quiser se comunicar com outro computador por SSH, primeiro você lhes dá sua chave pública, depois você criptografa a mensagem com sua chave privada e eles só podem decodificar a mensagem com a chave pública que você deu para o outro computador.

O mesmo acontece ao contrário, se o outro computador quiser lhe enviar uma mensagem, ele a codifica com sua chave pública e só pode decodificá-la com a chave privada que só você tem.

SSH requisitoslink image 53

Serviço SSH##link image 54

Para utilizar o SSH você precisa ter um serviço SSH. No Linux ele normalmente já está instalado, mas se não estiver, você pode instalá-lo através de

	
!apt install openssh-server
Copy

Durante o processo de instalação, você será solicitado a definir o fuso horário.

Em seguida, levantamos o serviço

	
!apt install openssh-server
!systemctl enable ssh
Copy

Cliente SSH##link image 55

Uma vez que você tenha o serviço que precisa, embora em "Linux" ele geralmente vem instalado, mas se não o tiver, você pode instalá-lo através de

	
!apt install openssh-server
!systemctl enable ssh
!apt install openssh-client
Copy

SSH conexãolink image 56

Para conectar via SSH você precisa entrar com o comando ssh <user>@<ip>.

	
!apt install openssh-server
!systemctl enable ssh
!apt install openssh-client
!ssh root@172.17.0.1
Copy
	
The authenticity of host '172.17.0.1 (172.17.0.1)' can't be established.
ECDSA key fingerprint is SHA256:M+qsqSC4HiYztm1ij8iDkh9KHJz+pxrTm9GTZIf2N9k.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

Como você pode ver, a primeira vez que ele pergunta se você quer salvar a "impressão digital", isto é para que se da próxima vez que você se conectar à mesma máquina (à mesma chave pública) se a "impressão digital" tiver mudado, você tenha cuidado, pois pode haver algo perigoso, como eles fazerem um hack naquela máquina.

Se dependermos de "sim", entramos em "sim".

	
!ssh root@172.17.0.1
Copy
	
The authenticity of host '172.17.0.1 (172.17.0.1)' can't be established.
ECDSA key fingerprint is SHA256:M+qsqSC4HiYztm1ij8iDkh9KHJz+pxrTm9GTZIf2N9k.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '172.17.0.1' (ECDSA) to the list of known hosts.
root@172.17.0.1's password:

Em seguida, a máquina à qual nos conectamos nos pede a senha, nós a introduzimos e estaremos dentro da máquina.

	
!ssh root@172.17.0.1
Copy
	
The authenticity of host '172.17.0.1 (172.17.0.1)' can't be established.
ECDSA key fingerprint is SHA256:M+qsqSC4HiYztm1ij8iDkh9KHJz+pxrTm9GTZIf2N9k.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '172.17.0.1' (ECDSA) to the list of known hosts.
root@172.17.0.1's password:
Welcome to Ubuntu 20.04.5 LTS (GNU/Linux 5.15.0-58-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
1 device has a firmware upgrade available.
Run `fwupdmgr get-upgrades` for more information.
* Introducing Expanded Security Maintenance for Applications.
Receive updates to over 25,000 software packages with your
Ubuntu Pro subscription. Free for personal use.
https://ubuntu.com/pro
Se pueden aplicar 0 actualizaciones de forma inmediata.
Your Hardware Enablement Stack (HWE) is supported until April 2025.
Last login: Thu Dec 1 16:32:23 2022 from 127.0.0.1
root@172.17.0.1:~$

Conexão sem senhalink image 57

Como vimos, quando nos conectamos é-nos pedida a senha da máquina de destino, mas se for uma máquina à qual vamos nos conectar a muito, podemos fazê-lo de modo que não nos seja pedida a senha toda vez que quisermos nos conectar.

Para eles, primeiro geramos uma chave ssh utilizando ssh-keygen.

	
!ssh-keygen
Copy
	
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:4HxRXkVkcK5kNXNyzakfQ6t8a24wRGCUYz4s5KL5ZEc root@e108f6f395b3
The key's randomart image is:
+---[RSA 3072]----+
| o+==@.=|
| +.= * Oo|
| . + = = + .|
| o o E * + + |
| = S . = o o|
| o + . = o |
| + . + .|
| . + |
| +. |
+----[SHA256]-----+

Como podemos ver, primeiro ele nos pergunta onde queremos salvar a chave, se não entrarmos nada, ele a salva no caminho padrão. E depois uma frase para gerar a chave, ** se você escrever uma frase você deve sempre lembrar-se dela***. Também se você escrever uma frase, ela pedirá por ela toda vez que tentar acessar a chave, então toda vez que quisermos acessar a máquina através do SSH, ela não pedirá a senha da máquina, mas pedirá por esta frase. Então você escolhe se não digitar uma frase para que ela nunca a peça, ou se você a digitar e sempre a digitará.

Em seguida, pedimos à máquina remota que salve nossa chave utilizando ssh-copy-id <user>@<id>:.

	
!ssh-copy-id root@172.17.0.1:
Copy
	
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@172.17.0.1's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'root@172.17.0.1'"
and check to make sure that only the key(s) you wanted were added.
root@103b6040196a:/# ssh root@172.17.0.1
Welcome to Ubuntu 20.04.5 LTS (GNU/Linux 5.15.0-58-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
4 devices have a firmware upgrade available.
Run `fwupdmgr get-upgrades` for more information.
58 updates can be applied immediately.
41 of these updates are standard security updates.
To see these additional updates run: apt list --upgradable
New release '22.04.1 LTS' available.
Run 'do-release-upgrade' to upgrade to it.
Your Hardware Enablement Stack (HWE) is supported until April 2025.
Last login: Thu Feb 2 08:05:48 2023 from 172.17.0.2
(base) root@172.17.0.1:~$

Utilize o terminal remoto via SSH.link image 58

Talvez não precisemos entrar na máquina remota porque só precisamos executar um único comando, para que possamos utilizar remotamente seu terminal adicionando a bandeira -t' ao comandoSSH', ou seja, por `ssh -t @ ``.

	
!ssh -t root@172.17.0.1 ping -c 4 google.com
Copy
	
PING google.com (172.217.168.174) 56(84) bytes of data.
64 bytes from mad07s10-in-f14.1e100.net (172.217.168.174): icmp_seq=1 ttl=111 time=2.94 ms
64 bytes from mad07s10-in-f14.1e100.net (172.217.168.174): icmp_seq=2 ttl=111 time=2.55 ms
64 bytes from mad07s10-in-f14.1e100.net (172.217.168.174): icmp_seq=3 ttl=111 time=2.78 ms
64 bytes from mad07s10-in-f14.1e100.net (172.217.168.174): icmp_seq=4 ttl=111 time=2.69 ms
--- google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 2.550/2.739/2.940/0.142 ms
Connection to 172.17.0.1 closed.

Como você pode ver, o comando é realizado na máquina remota e quando termina, a última linha nos diz que a conexão está fechada.

Proxy SSHlink image 59

Se você estiver navegando em um lugar que não seja muito seguro, ou em um lugar que tenha um proxy que não lhe permita acessar algumas portas, você pode navegar através do proxy de outra máquina utilizando SSH, isto pode ser feito adicionando a bandeira -D e a porta que você deseja conectar ao proxy remoto, como a porta para o tcp/ip é 9999 o comando poderia parecer `ssh -D 9999 @``.

Para que isto pareça melhor, antes de eu executar isto eu recebo meu IP desonesto

	
!curl ifconfig.me
Copy
	
188.127.184.59

Eu agora uso o proxy de um servidor web que eu instalei

	
!ssh -D 9999 root@194.62.99.222
Copy
	
Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-53-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Wed Feb 22 06:08:51 AM UTC 2023
System load: 0.02978515625
Usage of /: 11.7% of 24.53GB
Memory usage: 33%
Swap usage: 0%
Processes: 89
Users logged in: 0
IPv4 address for eth0: 194.62.99.222
IPv4 address for eth1: 10.7.0.168
IPv6 address for eth2: 2a04:3542:8000:1000:d48a:cbff:fefb:5b1
0 updates can be applied immediately.
The list of available updates is more than a week old.
To check for new updates run: sudo apt update
Last login: Wed Feb 22 06:02:35 2023 from 188.127.184.59
root@server1:~#

Alterar as configurações de proxy do meu computador

proxy ssh

Agora eu olho novamente para meu IP público, mas tomando o proxy recém-configurado

	
!curl -x socks5h://localhost:9999 ifconfig.me
Copy
	
194.62.99.222

Vemos que obtemos o IP público do servidor

Interface gráfica de usuário remota via SSH.link image 60

No linux a interface gŕafica é um servidor, portanto, podemos aproveitar isso e executar programas com interfaces gráficas que estão em uma máquina remota sobre SSH, utilizando a bandeira -X. O comando seria `ssh -X @``.

Primeiro faço login em meu servidor e instalo 'xeyes' utilizando 'sudo apt install x11-apps' e depois o executo remotamente a partir de meu computador.

	
!ssh -X root@194.62.99.222
Copy
	
Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-53-generic x86_64)
Last login: Wed Feb 22 06:39:52 2023 from 188.127.184.59
/usr/bin/xauth: file /root/.Xauthority does not exist
root@server1:~sudo apt install x11-apps
root@server1:~#xeyes

Agora em meu computador a janela "olhos" se abre, mas não está rodando no meu computador.

xeyes

Túnel SSHlink image 61

Como disse, criei um servidor ao qual tenho acesso ssh.

	
!ssh root@194.62.99.222
Copy
	
Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-53-generic x86_64)
Last login: Wed Feb 22 06:40:58 2023 from 188.127.184.59
root@server1:~#

E também montei um segundo servidor do qual tenho acesso a partir do servidor1, mas sem acesso a partir do meu computador.

Tento então acessar o `server2' a partir do meu computador e descubro que não posso.

	
!ssh root@194.62.99.235
Copy
	
ssh: connect to host 194.62.99.235 port 22: Connection timed out

E então eu tento acessar o server2 do server1 e vejo que posso.

	
!root@server1:~# ssh root@10.7.2.228
Copy
	
Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-53-generic x86_64)
Last login: Wed Feb 22 06:59:01 2023 from 10.7.0.168
root@server2:~#

Então o que criamos é um túnel do meu computador para o server2 até o server1, para isso utilizamos a bandeira -L. Para criar o túnel você tem que indicar o porto de seu computador onde você vai criar o túnel, depois o IP de destino do túnel, o porto pelo qual o túnel irá passar e finalmente o dispositivo que irá criar o túnel. Pareceria assim

"bash ssh -L <HOST PORT>:<DEST IP>:<TUNNEL PORT> <TUNNEL CREATOR USER>@<TUNNEL CREATOR IP>


      Vejamos com meu exemplo, tenho o "servidor1" com um "IP público" que podemos chamar de "ip_pub1" ao qual tenho acesso via "SSH" e um "IP privado" que podemos chamar de "ip_priv1" que está dentro da mesma rede do "servidor2". E eu tenho o `server2` com um `IP` público que podemos chamar de `ip_pub2` que não tenho acesso via `SSH` e um `IP` privado que podemos chamar de `ip_priv2` que está dentro da mesma rede que o `server1`.
      
      Primeiro eu crio o túnel
      
      "bash
      ssh -L host_port:ip_priv2:22 root@ip_pub1

Eu criei um túnel para o IP privado do server2 via o IP público do server1.

Finalmente, para conectar ao "servidor2", eu me conecto através do "localhost" e do porto de hospedagem que declarei no túnel.

"bash ssh -p 2020 root@localhost

Vejamos na realidade, os "IP's" dos meus servidores são

  • 'servidor1':
    • IP público: 194.62.99.222.
    *IP privado IP: 10.7.0.168.
  • 'servidor2':
    • IP público: `194.62.99.235'.
    *IP privado IP: 10.7.2.228.

Primeiro eu crio o túnel

	
!ssh -L 2020:10.7.2.228:22 root@194.62.99.222
Copy
	
Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-53-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Wed Feb 22 11:13:39 AM UTC 2023
System load: 0.0
Usage of /: 13.3% of 24.53GB
Memory usage: 36%
Swap usage: 0%
Processes: 91
Users logged in: 1
IPv4 address for eth0: 194.62.99.222
IPv4 address for eth1: 10.7.0.168
IPv6 address for eth2: 2a04:3542:8000:1000:d48a:cbff:fefb:5b1
101 updates can be applied immediately.
60 of these updates are standard security updates.
To see these additional updates run: apt list --upgradable
Last login: Wed Feb 22 09:29:52 2023 from 188.127.184.59
]0;root@server1: ~root@server1:~# ^C
]0;root@server1: ~root@server1:~#

Com o túnel criado, agora posso me conectar ao server2 a partir do meu computador.

	
!ssh -p 2020 root@localhost
Copy
	
Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-53-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Wed Feb 22 11:14:15 AM UTC 2023
System load: 0.0
Usage of /: 13.3% of 24.53GB
Memory usage: 33%
Swap usage: 0%
Processes: 90
Users logged in: 0
IPv4 address for eth0: 194.62.99.235
IPv4 address for eth1: 10.7.2.228
IPv6 address for eth2: 2a04:3542:8000:1000:d48a:cbff:fefb:7f47
* Strictly confined Kubernetes makes edge and IoT secure. Learn how MicroK8s
just raised the bar for easy, resilient and secure K8s cluster deployment.
https://ubuntu.com/engage/secure-kubernetes-at-the-edge
101 updates can be applied immediately.
60 of these updates are standard security updates.
To see these additional updates run: apt list --upgradable
Last login: Wed Feb 22 11:14:16 2023 from 10.7.0.168
]0;root@server2: ~root@server2:~# ^C
]0;root@server2: ~root@server2:~#

Conexão reversalink image 62

Vamos supor novamente que eu quero me conectar ao 'servidor2', mas agora eu não posso, por qualquer razão, fazer um túnel a partir do 'servidor1'. O que podemos fazer é criar uma conexão reversa a partir de outro servidor.

Suponha que eu tenha um terceiro servidor, chamado server3, que é acessível por SSH de ambos os lados, ou seja, tanto eu do meu computador quanto o server2 temos acesso. Assim, se pudermos acessar fisicamente o server2, uma conexão reversa pode ser feita do server2 para o server3.

ssh -R &ltserver3port&gt:localhost:22 root@&ltIPserver3&gt

Com isso, o que eu fiz foi permitir uma conexão do "servidor3" ao "servidor2" (o que não era possível antes), através do "localhost" e do "servidor3port" do "servidor3".

Agora do meu computador posso me conectar ao "servidor3" e do "servidor3" podemos nos conectar ao "servidor2" por meio de

"bash ssh -p <server3port> root@localhost

Vamos dar uma olhada nos dados dos meus servidores

  • 'servidor2':
    • IP público: `194.62.99.235'.
  • Servidor3:
    • IP público: `194.62.96.236'.

Primeiro faço a conexão inversa do servidor2 para o servidor3.

	
!root@server2:~# ssh -R 2020:localhost:22 root@194.62.96.236
Copy
	
Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-53-generic x86_64)
Last login: Wed Feb 22 15:25:58 2023 from 188.127.184.59
root@server3:~#

Agora eu me conecto ao server3.

	
!ssh root@194.62.96.236
Copy
	
Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-53-generic x86_64)
Last login: Wed Feb 22 15:12:19 2023 from 188.127.184.59
root@server3:~#

E agora que estou no 'servidor3', me conecto ao 'servidor2'.

	
!root@server3:~# ssh -p 2020 root@localhost
Copy
	
Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-53-generic x86_64)
Last login: Wed Feb 22 15:12:07 2023 from 188.127.184.59
root@server2:~#

Sucesso! Através do meu computador não posso me conectar diretamente ao "servidor2", mas ao me conectar ao "servidor3" consegui acessar o "servidor2" graças à conexão inversa que fiz do "servidor2" para o "servidor3".

Saltarlink image 63

Finalmente, outra maneira de fazer o login no "servidor2" é fazer o login no "servidor1" e depois do "servidor1" fazer o login no "servidor2". Mas isto é um pouco complicado, porque primeiro você tem que fazer uma conexão SSH ao server1 e depois outra ao server2, então para fazer tudo de uma só vez você pode usar a bandeira -J (jump), ou seja, ssh -J server1 server2 seria ssh -J server1 server2.

Resumem, primeiro faríamos ssh root@194.62.99.222 e depois ssh root@10.7.2.228 (já que dentro do server1 nos conectamos ao server2 através do IP privado).

Assim, poderíamos fazer tudo de uma só vez, fazendo ssh -J root@194.62.99.222 root@10.7.2.228

Vamos tentar

	
!ssh -J root@194.62.99.222 root@10.7.2.228
Copy
	
Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-60-generic x86_64)
Last login: Fri Feb 24 06:46:11 2023 from 10.7.0.168
root@server2:~#

Fomos capazes de fazer os saltos!

Arquivo de configuração SSH do usuáriolink image 64

Dispositivos com pseudônimoslink image 65

Em cada computador há um arquivo de configuração para o SSH que normalmente está localizado na pasta do usuário.

	
!cat ~/.ssh/config
Copy
	
# Read more about SSH config files: https://linux.die.net/man/5/ssh_config
Host 192.168.1.138
HostName 192.168.1.138
User maximo.fernandez

Neste arquivo eu salvei o usuário e o ip de alguns dos dispositivos aos quais costumo me conectar para não ter que preencher tudo sozinho. Vamos ver isso com os servidores que tenho

Meu servidor server1 tem o usuário root e o IP 194.62.99.222, então eu o adiciono à lista

	
!echo "Host server1 HostName 194.62.99.222 User root" >> ~/.ssh/config
Copy

Vamos dar uma outra olhada em como o arquivo de configuração se tornou

	
!echo "Host server1 HostName 194.62.99.222 User root" >> ~/.ssh/config
!cat ~/.ssh/config
Copy
	
# Read more about SSH config files: https://linux.die.net/man/5/ssh_config
Host 192.168.1.138
HostName 192.168.1.138
User maximo.fernandez
Host server1
HostName 194.62.99.222
User root

Agora que o adicionamos para conectar ao server1, só precisamos fazer o ssh server1.

	
!ssh server1
Copy
	
Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-60-generic x86_64)
Last login: Fri Feb 24 05:18:59 2023 from 188.127.184.59
root@server1:~#

Proxylink image 66

Como já vimos, acrescentando a bandeira '-D <port>' poderíamos mudar o procurador. Para deixar isto gravado no arquivo de configuração, basta adicionar a linha DynamicForward &ltport&gt ao host que estamos salvando.

Repetindo o exemplo anterior onde utilizamos o server1 como proxy para a porta tcp/ip (9999), o arquivo de configuração ficaria assim

Host proxyServer1
          HostName 194.62.99.222
          Raiz do usuário
          DynamicForward 9999

Nós adicionamos

	
!echo "Host proxyServer1 HostName 194.62.99.222 User root DynamicForward 9999" >> ~/.ssh/config
Copy

Vamos ver como é o arquivo de configuração

	
!echo "Host proxyServer1 HostName 194.62.99.222 User root DynamicForward 9999" >> ~/.ssh/config
!cat ~/.ssh/config
Copy
	
# Read more about SSH config files: https://linux.die.net/man/5/ssh_config
Host 192.168.1.138
HostName 192.168.1.138
User maximo.fernandez
Host server1
HostName 194.62.99.222
User root
Host proxyServer1
HostName 194.62.99.222
User root
DynamicForward 9999

Eu recebo meu IP público'.

	
!curl ifconfig.me
Copy
	
188.127.184.59

Eu me conecto ao servidor proxy

	
!ssh proxyServer1
Copy
	
Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-60-generic x86_64)
Last login: Fri Feb 24 05:42:32 2023 from 188.127.184.59
root@server1:~#

Alterar as configurações de proxy do meu computador

proxy ssh

Vejo meu IP público novamente, mas tomando o proxy recém-configurado

	
!curl -x socks5h://localhost:9999 ifconfig.me
Copy
	
194.62.99.222

Vemos que obtemos o IP público do servidor

Túnel SSHlink image 67

Se, como antes, eu quero criar um túnel para o server2 via server1, antes tínhamos que fazer ssh &ltHOST PORT&gt:&ltDEST IP&gt:&ltTUNNEL PORT&gt &ltTUNNEL CREATOR USER&gt@&ltTUNNEL CREATOR IP&gt, agora temos que adicionar a linha

"bash LocalForward <localhost>:<HOST PORT> <DEST IP>:<TUNNEL PORT>

Ou seja, o arquivo de configuração ficaria assim

Host tunelToServer2
          HostName 194.62.99.222
          Raiz do usuário
          LocalForward 127.0.0.0.1.1:2020 10.7.2.228:22

Mas como isso não está muito claro, vamos olhar para isso em termos concretos

  • 'servidor1':
    • IP público: 194.62.99.222.
    *IP privado IP: 10.7.0.168.
  • 'servidor2':
    • IP público: `194.62.99.235'.
    *IP privado IP: 10.7.2.228.

Anteriormente, o comando era

"bash ssh -L 2020:10.7.2.228:22 root@194.62.99.222


      Portanto, o arquivo de configuração tem que ser parecido com o seguinte
      

Host tunelToServer2 HostName 194.62.99.222 Raiz do usuário LocalForward 127.0.0.0.1.1:2020 10.7.2.228:22


      Vamos ver se funciona

Adicionamos a nova configuração

	
!echo "Host tunelToServer2 HostName 194.62.99.222 User root LocalForward 127.0.0.1:2020 10.7.2.228:22" >> ~/.ssh/config
Copy

Vamos ver como é o arquivo de configuração

	
!echo "Host tunelToServer2 HostName 194.62.99.222 User root LocalForward 127.0.0.1:2020 10.7.2.228:22" >> ~/.ssh/config
!cat ~/.ssh/config
Copy
	
# Read more about SSH config files: https://linux.die.net/man/5/ssh_config
Host 192.168.1.138
HostName 192.168.1.138
User maximo.fernandez
Host server1
HostName 194.62.99.222
User root
Host proxyServer1
HostName 194.62.99.222
User root
DynamicForward 9999
Host tunelToServer2
HostName 194.62.99.222
User root
LocalForward 127.0.0.1:2020 10.7.2.228:22

Criamos o túnel

	
!ssh tunelToServer2
Copy
	
Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-60-generic x86_64)
Last login: Fri Feb 24 06:02:20 2023 from 188.127.184.59
root@server1:~#

Agora estamos tentando nos conectar ao server2 a partir do meu computador.

	
!ssh -p 2020 root@localhost
Copy
	
Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-60-generic x86_64)
Last login: Fri Feb 24 06:02:36 2023 from 10.7.0.168
root@server2:~#

Feito! Mas podemos tornar tudo um pouco mais limpo, podemos adicionar esta última conexão ao arquivo de configuração

	
!echo "Host server2ByTunel HostName localhost User root Port 2020" >> ~/.ssh/config
Copy

Vamos ver como é o arquivo de configuração

	
!echo "Host server2ByTunel HostName localhost User root Port 2020" >> ~/.ssh/config
!cat ~/.ssh/config
Copy
	
# Read more about SSH config files: https://linux.die.net/man/5/ssh_config
Host 192.168.1.138
HostName 192.168.1.138
User maximo.fernandez
Host server1
HostName 194.62.99.222
User root
Host proxyServer1
HostName 194.62.99.222
User root
DynamicForward 9999
Host tunelToServer2
HostName 194.62.99.222
User root
LocalForward 127.0.0.1:2020 10.7.2.228:22
Host server2ByTunel
HostName localhost
User root
Port 2020

Agora conectamos novamente ao server2 a partir do meu computador, através do túnel, mas com a última configuração, acabamos de salvar.

	
!ssh server2ByTunel
Copy
	
Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-60-generic x86_64)
Last login: Fri Feb 24 06:13:33 2023 from 10.7.0.168
root@server2:~#

Em resumo, com tudo o que fizemos, podemos criar o túnel para o server2 com o comando ssh tunnelToServer2 e depois conectar ao server2 com o comando ssh server2ByTunel.

Impressionante!

Conexão reversalink image 68

Lembramos que agora nosso problema era que não podíamos nos conectar ao "servidor2" através do túnel do "servidor1". Então, criando uma conexão reversa do "servidor2" (temos alguém no "servidor2" que pode fazer essa conexão reversa, ou nós mesmos a deixamos feita antes de sairmos) para um "servidor3", do meu computador eu posso me conectar ao "servidor3" e depois me conectar ao "servidor2".

Primeiro temos que fazer a conexão inversa do servidor2 para o servidor3. Isto poderia ser feito com um comando

"bash ssh -R <server3port>:localhost:22 root@<IPserver3>


      Ou salvar a conexão no arquivo de configuração, adicionando
      

Host reverseToServer3 HostName <IPserver3> Raiz do usuário RemoteForward <server3port> localhost:22


      E fazer a conexão inversa por
      
      "bash
      ssh reverseToServer3

Como isso não facilita a compreensão, vamos analisá-lo com dados concretos.

  • 'servidor2':
    • IP público: `194.62.99.235'.
  • Servidor3:
    • IP público: `194.62.96.236'.

Para fazer a conexão inversa, você teria que usar o comando

"bash ssh -R 2020:localhost:22 root@194.62.96.236


      Ou salvar a seguinte configuração
      
      "bash
      Host reverseToServer3
          HostName 194.62.96.236
          Raiz do usuário
          RemoteForward 2020 localhost:22

E conectar via

"bash ssh reverseToServer3

Então eu salvo a configuração no servidor 2 e faço a conexão.

	
!root@server2:~# echo "Host reverseToServer3 HostName 194.62.96.236 User root RemoteForward 2020 localhost:22" >> ~/.ssh/config
Copy

Vamos ver o que tem sido bem guardado

	
!root@server2:~# echo "Host reverseToServer3 HostName 194.62.96.236 User root RemoteForward 2020 localhost:22" >> ~/.ssh/config
!root@server2:~# cat .ssh/config
Copy
	
Host reverseToServer3
HostName 194.62.96.236
User root
RemoteForward 2020 localhost:22

Eu faço a conexão inversa

	
!root@server2:~# ssh reverseToServer3
Copy
	
Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-53-generic x86_64)
Last login: Wed Feb 22 15:26:18 2023 from 194.62.99.235
root@server3:~#

Saltarlink image 69

Como dissemos, fizemos saltos utilizando a bandeira -J, de modo que com o comando ssh -J root@194.62.99.222 root@10.7.2.228 pudemos nos conectar ao server2.

Há duas opções para configurar o arquivo de configuração

A primeira é que, como já temos o server1 salvo no arquivo de configuração, apenas adicionamos o server2.

"bash Servidor anfitrião2 HostName 10.7.2.228 Raiz do usuário


      E então poderíamos nos conectar via
      
      "bash
      ssh -J server1 server2

Vamos experimentar

	
!echo "Host server2 HostName 10.7.2.228 User root " >> ~/.ssh/config
Copy

Vemos o arquivo de configuração

	
!echo "Host server2 HostName 10.7.2.228 User root " >> ~/.ssh/config
!cat ~/.ssh/config
Copy
	
# Read more about SSH config files: https://linux.die.net/man/5/ssh_config
Host 192.168.1.138
HostName 192.168.1.138
User maximo.fernandez
Host server1
HostName 194.62.99.222
User root
Host proxyServer1
HostName 194.62.99.222
User root
DynamicForward 9999
Host tunelToServer2
HostName 194.62.99.222
User root
LocalForward 127.0.0.1:2020 10.7.2.228:22
Host server2ByTunel
HostName localhost
User root
Port 2020
Host server2
HostName 10.7.2.228
User root

Agora nos conectamos através dos saltos

	
!ssh -J server1 server2
Copy
	
Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-60-generic x86_64)
Last login: Fri Feb 24 12:05:16 2023 from 10.7.0.168
root@server2:~#

Esta tem sido a primeira opção, para salvar cada servidor e configurar o lúpulo, mas uma segunda opção é salvar todos os lúpulos em uma única configuração, que seria parecida com esta

"bash Host server2jumping HostName 10.7.2.228 Raiz do usuário ProxyJump root@194.62.99.222


      Tudo o que seria necessário agora é se conectar via
      

ssh server2jumping


      Vamos tentar
	
!echo "Host server2jumping HostName 10.7.2.228 User root ProxyJump root@194.62.99.222" >> ~/.ssh/config
Copy

Vamos dar uma olhada no arquivo de configuração

	
!echo "Host server2jumping HostName 10.7.2.228 User root ProxyJump root@194.62.99.222" >> ~/.ssh/config
!cat ~/.ssh/config
Copy
	
# Read more about SSH config files: https://linux.die.net/man/5/ssh_config
Host 192.168.1.138
HostName 192.168.1.138
User maximo.fernandez
Host server1
HostName 194.62.99.222
User root
Host proxyServer1
HostName 194.62.99.222
User root
DynamicForward 9999
Host tunelToServer2
HostName 194.62.99.222
User root
LocalForward 127.0.0.1:2020 10.7.2.228:22
Host server2ByTunel
HostName localhost
User root
Port 2020
Host server2
HostName 10.7.2.228
User root
Host server2jumping
HostName 10.7.2.228
User root
ProxyJump root@194.62.99.222

Agora tentamos conectar

	
!ssh server2jumping
Copy
	
Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-60-generic x86_64)
Last login: Fri Feb 24 12:06:22 2023 from 10.7.0.168
root@server2:~#

Sistema SSH arquivo de configuraçãolink image 70

Anteriormente vimos o arquivo de configuração SSH do usuário, onde salvamos configurações de máquinas onde queríamos nos conectar via SSH, mas existe outro arquivo de configuração SSH mas neste caso do sistema, que está localizado em /etc/ssh/ssh_config, vamos dar uma olhada nele.

	
!cat /etc/ssh/sshd_config
Copy
	
# $OpenBSD: sshd_config,v 1.103 2018/04/09 20:41:22 tj Exp $
# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented. Uncommented options override the
# default value.
Include /etc/ssh/sshd_config.d/*.conf
#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_ecdsa_key
#HostKey /etc/ssh/ssh_host_ed25519_key
# Ciphers and keying
#RekeyLimit default none
# Logging
#SyslogFacility AUTH
#LogLevel INFO
# Authentication:
#LoginGraceTime 2m
#PermitRootLogin prohibit-password
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10
#PubkeyAuthentication yes
# Expect .ssh/authorized_keys2 to be disregarded by default in future.
#AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
#AuthorizedPrincipalsFile none
#AuthorizedKeysCommand none
#AuthorizedKeysCommandUser nobody
# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes
# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no
# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no
# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no
# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes
#GSSAPIStrictAcceptorCheck yes
#GSSAPIKeyExchange no
# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication. Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
UsePAM yes
#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
X11Forwarding yes
#X11DisplayOffset 10
#X11UseLocalhost yes
#PermitTTY yes
PrintMotd no
#PrintLastLog yes
#TCPKeepAlive yes
#PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
#UseDNS no
#PidFile /var/run/sshd.pid
#MaxStartups 10:30:100
#PermitTunnel no
#ChrootDirectory none
#VersionAddendum none
# no default banner path
#Banner none
# Allow client to pass locale environment variables
AcceptEnv LANG LC_*
# override default of no subsystems
Subsystem sftp /usr/lib/openssh/sftp-server
# Example of overriding settings on a per-user basis
#Match User anoncvs
# X11Forwarding no
# AllowTcpForwarding no
# PermitTTY no
# ForceCommand cvs server

Com este arquivo podemos mudar a configuração de como funciona o SSH em nosso computador. Por exemplo, podemos ver uma linha comentada que diz

"bash

Port 22link image 71


      Se o descomentarmos e mudarmos o número 'SSH', ele não irá mais para a porta 22, que é sua porta padrão, e irá para o número da porta especificada ali.

Cópia de arquivos por `SSHlink image 72

Podemos copiar arquivos sobre SSH utilizando o comando scp (cópia segura), para o qual a sintaxe é

"bash scp <path arquivo local> <user>@<IP>:<path para salvar>


      o
      
      "bash
      scp &ltuser&gt@&&&ltip&gt:&ltpath para arquivo remoto&gt &ltpath para salvar&gt

A primeira maneira copia um arquivo de nosso computador para outro computador e a segunda maneira copia um arquivo de outro computador para o nosso

Por exemplo, vamos fazer um ls de servidor1.

	
!ssh -t server1 "ls"
Copy
	
snap
Connection to 194.62.99.222 closed.

Vejamos o que temos reservado para que possamos passar para você.

	
!ls
Copy
	
2021-02-11-Introduccion-a-Python.ipynb html_files
2021-04-23-Calculo-matricial-con-Numpy.ipynb html.ipynb
2021-06-15-Manejo-de-datos-con-Pandas.ipynb introduccion_python
2022-09-12-Introduccion-a-la-terminal.ipynb mi_paquete_de_python
2023-01-22-Docker.ipynb movies.csv
2023-02-01-Bash-scripting.ipynb movies.dat
2023-02-04-Blip-2.ipynb notebooks_translated
2023-XX-XX-SSH.ipynb __pycache__
california_housing_train.csv scripts_bash
command-line-cheat-sheet.pdf ssh.ipynb
CSS.ipynb test.ipynb
'Expresiones regulares.ipynb'

Vamos enviar o arquivo html.ipynb para o servidor, pois ocupa pouco espaço.

	
!scp html.ipynb server1:/root/
Copy
	
html.ipynb 100% 14KB 229.0KB/s 00:00

Vamos ver novamente o que está dentro do server1.

	
!ssh -t server1 "ls"
Copy
	
html.ipynb snap
Connection to 194.62.99.222 closed.

Foi copiado

Sincronização de arquivos via SSH ## Sincronização de arquivos via SSH ## Sincronização de arquivos via SSH ## Sincronização de arquivos via `SSHlink image 73

O mal do comando scp é que se algo acontece no meio da cópia e você não termina de copiar o arquivo, quando você tenta novamente tem que começar do zero, isto é especialmente um problema com arquivos muito grandes.

Para contornar isso você pode utilizar o rsync, a sintaxe é

"bash rsync --parcial --progress --rsh=ssh <usuário>@::>.


      o
      
      "bash
      rsync --parcial --progress --rsh=ssh <usuário>@<ip>:<caminho para arquivo remoto> <caminho para salvar>

Como antes, a primeira maneira copia um arquivo de nosso computador para outro computador e a segunda maneira, de outro computador para o nosso. A bandeira "parcial" é para indicar que arquivos parcialmente copiados são salvos, ou seja, se a cópia é parada antes de ser concluída, o que foi copiado é mantido. A bandeira de "progresso" é para indicar o progresso da cópia. A bandeira --rsh=ssh deve indicar que a transferência do arquivo é feita sobre a bandeira SSH.

Passamos um arquivo

	
!rsync --partial --progress -rsh=ssh 2021-06-15-Manejo-de-datos-con-Pandas.ipynb server1:/root/
Copy
	
sending incremental file list
2021-06-15-Manejo-de-datos-con-Pandas.ipynb
608.34K 100% 197.78MB/s 0:00:00 (xfr#1, to-chk=0/1)

E vemos se foi copiado

	
!ssh -t server1 "ls"
Copy
	
2021-06-15-Manejo-de-datos-con-Pandas.ipynb html.ipynb snap
Connection to 194.62.99.222 closed.

Montar pastas remotas em pastas locaislink image 74

Caso queiramos ter uma pasta de outra máquina como se estivesse em nosso computador, temos de uasr sshfs.

Primeiro precisa ser instalado por

"bash sudo apt install sshfs


      E uma vez instalado, ele é usado com a sintaxe
      
      "bash
      sshfs &ltuser&gt@&&&ltip&gt:&ltremote path&gt &ltlocal path to mount&gt

Vamos montar a pasta /root' doservidor1', mas para isso vamos primeiro criar uma pasta na qual vamos montá-la.

	
!mkdir server1folder
Copy

Podemos ver que não há nada dentro da pasta que montamos.

	
!mkdir server1folder
!ls server1folder
Copy

Agora montamos a pasta do servidor

	
!mkdir server1folder
!ls server1folder
!!sshfs server1:/root/ server1folder
Copy

Voltamos para ver o que está dentro

	
!mkdir server1folder
!ls server1folder
!!sshfs server1:/root/ server1folder
!ls server1folder
Copy
	
2021-06-15-Manejo-de-datos-con-Pandas.ipynb html.ipynb snap

Quando não quisermos mais ter a pasta montada, podemos desmontá-la por 'fusermount -u server1folder'.

	
!!fusermount -u server1folder
Copy

Olhamos novamente para o que está dentro para ver que não há nada.

	
!!fusermount -u server1folder
!ls server1folder
Copy

Depurando a conexão `SSHlink image 75

Podemos depurar a conexão SSH adicionando -v, até -vvvv à conexão, quanto mais vs adicionarmos, maior será o nível de informação.

	
!!fusermount -u server1folder
!ls server1folder
!ssh -v server1
Copy
	
OpenSSH_8.2p1 Ubuntu-4ubuntu0.5, OpenSSL 1.1.1f 31 Mar 2020
debug1: Reading configuration data /home/wallabot/.ssh/config
debug1: /home/wallabot/.ssh/config line 6: Applying options for server1
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files
debug1: /etc/ssh/ssh_config line 21: Applying options for *
debug1: Connecting to 194.62.99.222 [194.62.99.222] port 22.
debug1: Connection established.
debug1: identity file /home/wallabot/.ssh/id_rsa type 0
debug1: identity file /home/wallabot/.ssh/id_rsa-cert type -1
debug1: identity file /home/wallabot/.ssh/id_dsa type -1
debug1: identity file /home/wallabot/.ssh/id_dsa-cert type -1
debug1: identity file /home/wallabot/.ssh/id_ecdsa type -1
debug1: identity file /home/wallabot/.ssh/id_ecdsa-cert type -1
debug1: identity file /home/wallabot/.ssh/id_ecdsa_sk type -1
debug1: identity file /home/wallabot/.ssh/id_ecdsa_sk-cert type -1
debug1: identity file /home/wallabot/.ssh/id_ed25519 type -1
debug1: identity file /home/wallabot/.ssh/id_ed25519-cert type -1
debug1: identity file /home/wallabot/.ssh/id_ed25519_sk type -1
debug1: identity file /home/wallabot/.ssh/id_ed25519_sk-cert type -1
debug1: identity file /home/wallabot/.ssh/id_xmss type -1
debug1: identity file /home/wallabot/.ssh/id_xmss-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5
debug1: Remote protocol version 2.0, remote software version OpenSSH_8.9p1 Ubuntu-3
debug1: match: OpenSSH_8.9p1 Ubuntu-3 pat OpenSSH* compat 0x04000000
debug1: Authenticating to 194.62.99.222:22 as 'root'
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: algorithm: curve25519-sha256
debug1: kex: host key algorithm: ecdsa-sha2-nistp256
debug1: kex: server->client cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none
debug1: kex: client->server cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ecdsa-sha2-nistp256 SHA256:jwpQt2a69LQcuvvYPPKL32bBwTi1Je/ZmUdr4zEiD1Y
debug1: Host '194.62.99.222' is known and matches the ECDSA host key.
debug1: Found key in /home/wallabot/.ssh/known_hosts:14
debug1: rekey out after 134217728 blocks
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: rekey in after 134217728 blocks
debug1: Will attempt key: /home/wallabot/.ssh/id_rsa RSA SHA256:ID3HcrbyPBGjFx/qeiJK50eqihLGrpDVu02oRSyKGh4 agent
debug1: Will attempt key: wallabot@wallabot RSA SHA256:Qlq6hXbToInW+efEK666BFT26EeUSpBhzcqxTLrDBpQ agent
debug1: Will attempt key: /home/wallabot/.ssh/id_dsa
debug1: Will attempt key: /home/wallabot/.ssh/id_ecdsa
debug1: Will attempt key: /home/wallabot/.ssh/id_ecdsa_sk
debug1: Will attempt key: /home/wallabot/.ssh/id_ed25519
debug1: Will attempt key: /home/wallabot/.ssh/id_ed25519_sk
debug1: Will attempt key: /home/wallabot/.ssh/id_xmss
debug1: SSH2_MSG_EXT_INFO received
debug1: kex_input_ext_info: server-sig-algs=<ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com,webauthn-sk-ecdsa-sha2-nistp256@openssh.com>
debug1: kex_input_ext_info: publickey-hostbound@openssh.com (unrecognised)
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering public key: /home/wallabot/.ssh/id_rsa RSA SHA256:ID3HcrbyPBGjFx/qeiJK50eqihLGrpDVu02oRSyKGh4 agent
debug1: Authentications that can continue: publickey
debug1: Offering public key: wallabot@wallabot RSA SHA256:Qlq6hXbToInW+efEK666BFT26EeUSpBhzcqxTLrDBpQ agent
debug1: Server accepts key: wallabot@wallabot RSA SHA256:Qlq6hXbToInW+efEK666BFT26EeUSpBhzcqxTLrDBpQ agent
debug1: Authentication succeeded (publickey).
Authenticated to 194.62.99.222 ([194.62.99.222]:22).
debug1: channel 0: new [client-session]
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: pledge: network
debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0
debug1: Remote: /root/.ssh/authorized_keys:1: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding
debug1: Remote: /root/.ssh/authorized_keys:1: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding
debug1: Sending environment.
debug1: Sending env LANG = es_ES.UTF-8
Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-60-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Fri Feb 24 01:25:10 PM UTC 2023
System load: 0.0
Usage of /: 15.2% of 24.53GB
Memory usage: 34%
Swap usage: 0%
Processes: 89
Users logged in: 0
IPv4 address for eth0: 194.62.99.222
IPv4 address for eth1: 10.7.0.168
IPv6 address for eth2: 2a04:3542:8000:1000:d48a:cbff:fefb:5b1
* Strictly confined Kubernetes makes edge and IoT secure. Learn how MicroK8s
just raised the bar for easy, resilient and secure K8s cluster deployment.
https://ubuntu.com/engage/secure-kubernetes-at-the-edge
43 updates can be applied immediately.
To see these additional updates run: apt list --upgradable
Last login: Fri Feb 24 13:10:05 2023 from 188.127.184.59
]0;root@server1: ~root@server1:~# ^C
]0;root@server1: ~root@server1:~#

Continuar lendo

DoLa – Decoding by Contrasting Layers Improves Factuality in Large Language Models

DoLa – Decoding by Contrasting Layers Improves Factuality in Large Language Models

Você já conversou com um LLM e ele lhe respondeu algo que parece ter bebido café de máquina a noite toda? 😂 Isso é o que chamamos de alucinação no mundo dos LLMs! Mas não se preocupe, pois não é que seu modelo de linguagem esteja louco (embora às vezes possa parecer isso 🤪). A verdade é que os LLMs podem ser um pouco... criativos quando se trata de gerar texto. Mas graças ao DoLa, um método que usa camadas de contraste para melhorar a viabilidade dos LLMs, podemos evitar que nossos modelos de linguagem se transformem em escritores de ficção científica 😂. Nesta publicação, explicarei como o DoLa funciona e mostrarei um exemplo de código para que você possa entender melhor como tornar seus LLMs mais confiáveis e menos propensos a inventar histórias. Vamos salvar nossos LLMs da loucura e torná-los mais úteis! 🚀

Últimos posts -->

Você viu esses projetos?

Subtify

Subtify Subtify

Gerador de legendas para vídeos no idioma que você desejar. Além disso, coloca uma legenda de cor diferente para cada pessoa

Ver todos os projetos -->

Quer aplicar IA no seu projeto? Entre em contato!

Quer melhorar com essas dicas?

Últimos tips -->

Use isso localmente

Os espaços do Hugging Face nos permitem executar modelos com demos muito simples, mas e se a demo quebrar? Ou se o usuário a deletar? Por isso, criei contêineres docker com alguns espaços interessantes, para poder usá-los localmente, aconteça o que acontecer. Na verdade, se você clicar em qualquer botão de visualização de projeto, ele pode levá-lo a um espaço que não funciona.

Ver todos os contêineres -->

Quer aplicar IA no seu projeto? Entre em contato!

Você quer treinar seu modelo com esses datasets?

short-jokes-dataset

Dataset com piadas em inglês

opus100

Dataset com traduções de inglês para espanhol

netflix_titles

Dataset com filmes e séries da Netflix

Ver mais datasets -->