========== Acesso SSH ========== O acesso remoto no DINF se dá através de uma conexão SSH. SSH é acrônimo de Secure Shell, e é um protocolo de rede que roda na porta 22 via TCP. Ele permite que um terminal possa ser criado em um outro computador com criptografia de ponta-a-ponta. Essa criptografia permite que pacotes interceptados contendo os seus comandos não possam ser lidos. O servidor de SSH do DINF canonicamente fica no endereço `ssh.inf.ufpr.br `_. Ele aceita ao menos dois modos de conexão: * Acesso por senha Aqui é utilizada a senha do DINF, que é a mesma senha do acesso do seu email via Webmail. * Acesso via chave privada Feita utilizando um par de chaves assimétricas. O jeito de se conectar depende do seu cliente de SSH. * No Linux, existe o programa ``ssh``. * No Windows é recomendado configurar o Windows Subsystem for Linux e usar o programa ``ssh`` (uma alternativa é o `PuTTY `_). Acesso remoto via ssh ===================== Usando o programa do Linux ssh é possível iniciar uma conexão SSH dando os seguintes argumentos:: $ ssh usr99@ssh.inf.ufpr.br Onde o seu usuário deverá substituir o ``usr99``. O seu nome de usuário é o mesmo encontrado antes do @ no seu email do DINF. Na autenticação via senha, a sua senha será requisitada. Na autenticação via chave privada, sua frase-senha será requisitada. Se você estiver atrás de um firewall que bloqueia a porta padrão 22 que é padrão do SSH, o servidor SSH do departamento também suporta a conexão via porta 80:: $ ssh -p 80 usr99@ssh.inf.ufpr.br .. _transferencia: Cópia de arquivos via scp ========================= Usando o programa do Linux scp, é possível fazer uma cópia de arquivos utilizando uma conexão SSH:: $ scp usr99@ssh.inf.ufpr.br:~/relatório.pdf . $ scp relatório.pdf usr99@ssh.inf.ufpr.br:~/relatório-novo.pdf O primeiro argumento seleciona a origem, e o segundo o destino. No primeiro comando por exemplo, copiamos o arquivo relatório.pdf do diretório home remoto para o diretório atual local. No segundo, copiamos o arquivo local relatório.pdf para um arquivo chamado relatório-novo.pdf no diretório home remoto. Para identificar um recurso remoto, é utilizado a sintaxe ``[usuário]@[máquina]:[caminho]``, enquanto que recursos locais são identificados apenas utilizando ``[caminho]``. Utilizando acesso via chave privada =================================== O acesso via chave privada é mais simples e permite que você não precise ficar digitando toda hora a senha para fazer uma conexão SSH. Ele se baseia em um esquema de chave assimétrica. Isso significa que o acesso é feito usando um par de chaves. Uma é chamada de chave pública (geralmente um arquivo chamado id_ed25519.pub), e outra de chave privada (geralmente um arquivo chamado id_ed25519). Com uma certa chave privada, é possível acessar qualquer servidor que reconheça a chave pública vinculada. Para fazer com que o servidor SSH reconheça uma certa chave pública, é necessário que seja incluída mais uma linha no arquivo ~/.ssh/authorized_keys, contendo a sua chave pública. O comando ssh e derivados, procuram a sua chave privada para acesso no diretório ~/.ssh/id_ed25519. Geralmente, o arquivo da chave privada é protegido com uma senha, chamada de frase-senha, que o ssh também irá perguntar na hora de se conectar utilizando aquela chave privada. Vamos então aos passos de como se obter um par de chaves assimétricas para acesso SSH. 1. O primeiro passo é gerar um par de chaves assimétricas. Nós vamos utilizar o padrão ED25519:: $ ssh-keygen -t ed25519 -C 'usr99@inf.ufpr.br' Generating public/private ed25519 key pair. Enter file in which to save the key (/home/usr99/.ssh/id_ed25519): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in id_ed25519 Your public key has been saved in id_ed25519.pub The key fingerprint is: SHA256:YPO1upNw6v8nksw8Z+6zgducWQUyiEBQ7pJ+5njvEZA usr99@inf.ufpr.br The key's randomart image is: +--[ED25519 256]--+ | .++ | | . o . . | | E = . + . | | o o + . + . | | o . . S . . | | . . ...o . | | . o .Boo. . | | =. ..X===. | | ...++.+XX= | +----[SHA256]-----+ Esse programa irá perguntar uma frase-senha que é uma senha para proteger a sua chave privada (que preferencialmente deve ser longa, por isso o nome). Serão gerados os dois arquivos com as chaves assimétricas no diretório ~/.ssh: id_ed25519 e id_ed25519.pub. 2. Copie utilizando scp o arquivo ~/.ssh/id_ed25519.pub para o arquivo ~/.ssh/authorized_keys. O arquivo ~/.ssh/authorized_keys pode aceitar mais de uma chave pública, uma por linha, mas como queremos por enquanto apenas utilizarmos uma, sobrescrever o arquivo será suficiente. Depois disso, o acesso utilizando o comando ssh consultará o diretório ~/.ssh por chaves e preferencialmente irá tentar utilizar uma das suas chaves para iniciar uma conexão. Será pedido a frase-senha em cada nova sessão de SSH. Lembre de mim: Como não precisar ficar digitando a frase-senha ============================================================== Muitas distribuições Linux vem com um agente gestor de chaves privadas chamado ``ssh-agent``. Ele permite que programas possam utilizar as chaves privadas sem ter acesso direto a elas, e sem necessidade de pedir a frase-senha para você. Para adicionar uma chave-pública ao ssh-agent basta dar o seguinte comando:: $ ssh-add ~/.ssh/id_ed25519 Onde o argumento é o arquivo de chave privada. Sem esse argumento, por padrão, o ssh-add pega o arquivo ~/.ssh/id_ed25519, então na maioria das vezes, só ssh-add é suficiente. O ssh-add requisitará a frase-senha da chave privada, e guardará a chave privada de forma desencriptada na memória até o fim da sua sessão no Linux. Feito isso, não será mais requisitado a sua frase-senha para conexões SSH. Uma das coisas que agora vai funcionar será o autocomplete do bash nos comandos de scp ou de sshfs. Além disso, é possível encaminhar a conexão ao agente em uma conexão SSH. Ao passar o argumento -A ao comando ssh, a conexão ao agente é 'encaminhada', e será possível por exemplo acessar outros computadores do DINF sem precisar redigitar a senha. sshfs: Sistema de arquivos remoto 'virtual' =========================================== Nas distribuições de Linux, é possível encontrar um programa chamado sshfs nos repositórios de programas. Ele é capaz de criar um diretório 'virtual' no seu sistema de arquivos que permite que você manipule o sistema de arquivos remoto como se você estivesse mexendo no seu próprio sistema de arquivos. É uma espécie de diretório sincronizado. Para fazer tal feito, ele utiliza do FUSE que é acrônimo para Filesystem in Userspace, ou sistema de arquivos em espaço de usuário. Isso permite, por exemplo, que não seja necessário que o programa sshfs seja executado com privilégios de root, sendo só necessário que o sistema operacional suporte essa extensão. Vamos aos passos para utilizá-lo: 1. Primeiro, é necessário criar um diretório vazio no seu sistema de arquivos onde será criado o diretório virtual do sshfs. Utilizaremos no exemplo, um diretório chamado ~/dinf. 2. Em seguida, inicie o sistema de arquivos remoto usando o seguinte comando:: $ sshfs usr99@ssh.inf.ufpr.br: ~/dinf Isso irá inicializar o diretório remoto padrão (o home) no diretório local ~/dinf. Você pode utilizar outro diretório, seguindo a mesma sintaxe do scp: [usuário]@[máquina]:[caminho]. 3. Para certificar que todas as alterações foram feitas e para desmontar o diretório, utilize o seguinte comando:: $ fusermount -u ~/dinf Esboço para o seu arquivo ~/.ssh/config (Linux ou WSL) ====================================================== Uma configuração útil para poupar o tempo de digitar uma linha inteira como:: $ ssh usr99@ssh.inf.ufpr.br toda hora é criar um arquivo ~/.ssh/config e colocar nele:: Compression yes Host dinf HostName ssh.inf.ufpr.br User usr99 ForwardAgent yes Host dinf+orval HostName orval User usr99 ForwardAgent yes ProxyJump dinf Daí por exemplo você por exemplo pode acessar o DINF digitando simplesmente:: $ ssh dinf , ou acessar a orval (uma máquina está dentro do DINF que deve ser usada para processamentos mais pesados) usando:: $ ssh dinf+orval diretamente. * ``ForwardAgent`` permite que a sua chave SSH do ``ssh-agent`` que foi desbloqueada pelo ssh-add seja encaminhada, para que evitar que seja necessário digitar a senha de novo ao acessar outros computadores através da máquina de SSH. * ``ProxyJump`` é pra instruir que a conexão até a orval é feita 'intermediada' pela máquina de SSH do DINF. * ``Compression`` ativa a compressão para todas as conexões, o que acelera bastante as coisas, mas principalmente as conexões com X11 Forwarding.