Muitas vezes é difícil gerenciar várias máquinas em um banco de dados diariamente. Ainda que o Secure Shell (SSH) seja uma boa escolha para o acesso remoto, o protocolo em si possui alguns inconvenientes tanto em conveniência como em segurança.
Por exemplo, máquinas remotas precisam ter um endereço IP público e uma porta redirecionada para acessá-los, o que os expõe à Internet, ou pelo menos a uma rede maior. Isso é especialmente preocupante caso use uma senha para autenticação em vez de um par de chaves público e privado. Além disso, caso não conheça a chave pública da máquina remota antecipadamente, você fica vulnerável a um ataque “man-in-the-middle”. E muitas máquinas remotas que você vai querer acessar não têm endereço IP público ou têm um endereço IP dinâmico que você não sabe.
Além disso, o SSH exige uma conexão por sessão remota. Se um usuário precisa executar um único comando em centenas ou mesmo milhares de máquinas, é preciso primeiro estabelecer uma conexão com cada máquina com um handshake TCP, que é menos eficiente.
O NKN Shell, ou nsh, é uma alternativa ao SSH que fornece uma maneira conveniente e segura de executar comandos remotos. O nsh aproveita a rede pública global do NKN, que fornece transmissão de dados segura e descentralizada. A arquitetura usa endereços únicos que contêm uma chave pública usada tanto para o roteamento quanto para a criptografia end-to-end sem nenhuma infraestrutura de chave pública (PKI). A rede também não exige que o servidor remoto tenha um endereço IP público. O servidor remoto precisa ter acesso à Internet e ser capaz de estabelecer conexões HTTP de saída e de websocket. Como resultado, suas máquinas remotas não são expostas à Internet aberta.
Neste tutorial, você usará o daemon do NKN shell e o aplicativo Xterm do cliente NKN Shell para executar comandos em uma máquina remota. Para fazer isso, você instalará e configurará o daemon do NKN Shell em uma máquina remota com acesso à internet, gerará um par de chaves e fará sua conexão de um cliente.
Para seguir este tutorial, você precisará do seguinte:
sudo
e um firewall.Primeiro, instale o daemon do NKN shell (nsd
) no seu servidor. Esse aplicativo invoca o nkn-multiclient, que se conectará à rede pública do NKN e receberá um endereço para o roteamento. Então, o daemon escutará comandos shell de entrada de clientes autenticados e listados, executará esses comandos e, em seguida, enviará os resultados de volta.
Comece baixando os binários nshd pré-compilados do GitHub mais recentes:
- wget https://github.com/nknorg/nkn-shell-daemon/releases/latest/download/linux-amd64.tar.gz
Descompacte o arquivo:
- tar -zxvf linux-amd64.tar.gz
Então, mova os arquivos para o diretório /usr/local/bin
, para que eles estejam disponíveis em todo o sistema:
- sudo mv ./linux-amd64/* /usr/local/bin/
Em seguida, você configurará isso para ser executado como um processo daemon usando o Systemd, para que ele seja reiniciado caso o servidor seja redefinido.
Crie um arquivo chamado nshd.service
em /etc/systemd/system
:
- sudo nano /etc/systemd/system/nshd.service
Adicione a seguinte definição de serviço ao arquivo para configurar o serviço:
[Unit]
Description=NKN Shell Daemon
After=network.target
[Service]
Type=simple
User=root
Group=root
Restart=always
ExecStart=/usr/local/bin/nshd
[Install]
WantedBy=multi-user.target
Saiba mais sobre arquivos de unidade do Systemd em Entendendo unidades do Systemd e arquivos de unidade.
Salve o arquivo e saia do editor. Então, habilite e inicie o serviço nshd
com os seguintes comandos:
- sudo systemctl enable nshd.service
- sudo systemctl start nshd.service
Execute o seguinte comando para garantir que o serviço esteja ativo e iniciado:
- sudo systemctl status nshd.service
Você verá que o status está ativo:
Output● nshd.service - NKN Shell Daemon
Loaded: loaded (/etc/systemd/system/nshd.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2020-02-19 19:16:02 UTC; 7s ago
Main PID: 3457 (nshd)
Tasks: 10 (limit: 1152)
CGroup: /system.slice/nshd.service
└─3457 /usr/local/bin/nshd
Feb 19 19:16:02 your_hostname systemd[1]: Started NKN Shell Daemon.
Feb 19 19:16:03 your_hostname nshd[3457]: Create directory /etc/nshd/
Feb 19 19:16:03 your_hostname nshd[3457]: Create password and save to file /etc/nshd/wallet.pswd
Feb 19 19:16:03 your_hostname nshd[3457]: Create wallet and save to file /etc/nshd/wallet.json
Feb 19 19:16:03 your_hostname nshd[3457]: Create authorized pubkeys file /etc/nshd/authorized_pubkeys
Feb 19 19:16:03 your_hostname nshd[3457]: Listening at d46567b883a3070ee3fe879d9fa2d5dc55a95f79ff2797c42df36c6979e5c4Aba
Para se conectar ao seu servidor, você precisará obter seu endereço NKN, que pode ser encontrado no resultado do comando anterior. Também é possível executar o seguinte comando para obter o endereço:
- nshd addr
Você verá seu endereço aparecer:
Outpute70ca28ede84fc0659f2869255e8a393aef35b4fa5a7e036f29127c7dba75383
Anote este endereço, uma vez que precisará dele para se conectar ao seu servidor.
Agora que o daemon está em execução e escutando, é possível configurar o cliente baseado na Web para falar com o servidor.
Você precisará de um cliente compatível que possa se conectar à máquina remota. Neste tutorial, você usará o cliente Xterm do NKN Shell, um cliente NKN shell baseado na Web. Há várias maneiras diferentes de executá-lo:
Neste tutorial, você usará a versão hospedada. Na sua máquina local, abra o navegador Web e navegue até https://nsh.nkn.org. Você verá uma tela de boas vindas:
Clique em Generate New Key Pair (Gerar novo par de chaves). Suas chaves serão geradas e exibidas como mostrado na imagem seguinte:
Nota: quando gerar um novo par de chaves, você verá um seed secreto. Mantenha esse seed secreto seguro, assim como você faria com sua chave privada SSH. Qualquer um que tenha esse seed secreto pode usá-lo para regenerar sua chave pública e, em seguida, executar comandos em suas máquinas remotas. Seu navegador se lembrará desse seed, mas você deve copiá-lo em um lugar seguro para que possa usá-lo novamente em uma nova máquina.
Salve o seed secreto em um lugar seguro. É possível usá-lo mais tarde para regenerar sua chave pública para que você possa se conectar a partir de uma máquina de cliente diferente.
Como trata-se de um novo par de chaves, é preciso adicionar a chave pública ao arquivo /etc/nshd/authorized_pubkeys
no seu servidor.
O /etc/nshd/authorized_pubkeys
tem um papel semelhante ao arquivo ~/authorized_keys
, que controla quais chaves públicas SSH podem fazer login. O arquivo authorized_pubkeys
especifica qual usuário está associado a uma chave. Para fins de segurança, faça login usando um usuário não raiz neste tutorial, de modo que a chave pública gerada seja associada com seu usuário sammy criado no tutorial pré-requisito deste artigo, Configuração inicial de servidor.
Para associar um usuário à chave pública, será necessário obter o ID de usuário (UID) e o ID de grupo (GID) deste usuário. Execute o seguinte comando no seu servidor, enquanto logado como o usuário sammy:
- id
Você verá o UID e o GID do usuário:
Outputuid=1000(sammy) gid=1000(sammy) groups=1000(sammy),27(sudo)
Agora, abra o arquivo authorized_pubkeys
no seu editor:
- sudo nano /etc/nshd/authorized_pubkeys
Adicione uma linha única que contenha a chave pública, UID e GID, separados por espaços:
5d5367a5730427c205904a4457392051d2045dbce0186518fb6eb24dd9e41ba6 1000 1000
Salve o arquivo.
Verifique se o arquivo contém o conteúdo correto:
- cat /etc/nshd/authorized_pubkeys
Você verá sua chave impressa na tela:
Output5d5367a5730427c205904a4457392051d2045dbce0186518fb6eb24dd9e41ba6 1000 1000
Então, reinicie o daemon nshd
para aplicar as alterações:
- sudo systemctl restart nshd.service
Agora, vamos testá-lo. Para isso, conecte-se ao servidor e execute um comando.
No cliente NKN Shell, digite seu endereço remoto nshd
do Passo 1, bem como um identificador de cliente opcional:
Clique em Connect (Conectar) para iniciar a conexão.
Você se conectará à sua máquina remota e será exibido um prompt de terminal dentro do navegador. A partir daqui, use-o da mesma forma que o SSH. Por exemplo, execute o comando a seguir para alternar para o diretório /etc/nshd
:
- cd /etc/nshd
Então, liste o conteúdo do diretório:
- ls
Você verá o conteúdo dele:
Outputauthorized_pubkeys wallet.json wallet.pswd
Desconecte-se digitando exit
. Quando precisar se reconectar, visite novamente a interface Web e digite seus detalhes de conexão. Caso gere um novo par de chaves, será necessário adicionar a nova chave pública ao seu servidor.
Neste tutorial, você instalou e configurou o nsh para enviar comandos de maneira segura e conveniente para uma máquina remota. O nsh é uma ótima maneira de acessar suas máquinas remotas quando você precisa executar rapidamente um comando para obter o status mais recente de um serviço ou espiar algumas definições de configuração. O aplicativo se baseia na rede pública global da NKN e é gratuito para usar. Dessa forma, você pode incorporá-lo no seu próprio aplicativo ou fluxo de trabalho hoje.
Também é possível explorar o nkn-tunnel, que é compatível com o SSH ou qualquer outro aplicativo baseado no TCP.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!