Acesso remoto e transferência de arquivos com SSH

LinuxBeginner
Pratique Agora

Introdução

O SSH fornece acesso criptografado pela linha de comando a outra conta Linux, enquanto o SCP usa a mesma autenticação e o mesmo transporte para copiar arquivos. Em uma primeira conexão segura, você verifica a chave de host do servidor; nas conexões seguintes, pode usar uma chave pessoal em vez de enviar repetidamente a senha da conta.

Neste laboratório, você usará a conta isolada remoteuser em localhost como host remoto. Embora as duas contas compartilhem a mesma VM de treinamento, o protocolo SSH, os prompts de autenticação, o diretório pessoal remoto e as transferências de arquivos se comportam como em um fluxo de trabalho básico entre dois hosts. O caminho de acesso SSH padrão do labex não é alterado.

Inspecione o destino SSH

Nesta etapa, você identificará o cliente SSH, resolverá o nome do destino, confirmará que há um servidor escutando e visualizará uma prévia da chave pública de host.

Entre no espaço de trabalho local:

cd /home/labex/project/ssh-lab

Exiba a versão do cliente OpenSSH. Esse programa escreve a versão na saída de erro padrão, por isso 2>&1 combina essa saída com a saída padrão:

ssh -V 2>&1

Resolva o destino local usando a configuração de resolução de nomes do sistema:

getent hosts localhost

Confirme que um servidor SSH está escutando na porta TCP 22:

sudo ss -ltnp | grep ':22'

O ssh-keyscan recupera chaves públicas de host sem fazer login. Encaminhe a chave ED25519 para ssh-keygen -lf - para exibir sua impressão digital:

ssh-keyscan -t ed25519 localhost 2>/dev/null | ssh-keygen -lf -

Em um ambiente real, compare essa impressão digital com um valor confiável fornecido pelo administrador antes de aceitá-la. Salve um resumo compacto do destino:

printf 'target=localhost\nport=22\nuser=remoteuser\n' > ssh-target.txt
cat ssh-target.txt

Abra seu primeiro shell remoto

Nesta etapa, você verificará uma chave de host, fará a autenticação com uma senha, inspecionará a conta remota e fechará o shell remoto.

Conecte-se usando o formato user@host:

ssh remoteuser@localhost

Como a configuração removeu qualquer registro anterior da chave de host de localhost, o SSH perguntará se você confia na impressão digital exibida. Depois de compará-la com a da Etapa 1, digite:

yes

No prompt de senha, digite:

RemoteLab123!

A senha não será exibida enquanto você digita. Depois do login, o prompt pertencerá a remoteuser, não a labex. Confirme a identidade remota, o host e o diretório atual:

whoami
hostname
pwd

Crie um arquivo de controle no diretório pessoal da conta remota:

mkdir -p ~/ssh-lab
printf 'connected as %s\n' "$(whoami)" > ~/ssh-lab/connected.txt

Feche o shell remoto e volte ao prompt local de labex:

exit

O comando exit encerra apenas o shell remoto; o terminal local continua aberto.

Execute um comando remoto

Nesta etapa, você executará comandos remotamente sem abrir um shell interativo de longa duração e salvará a saída localmente.

Volte ao espaço de trabalho local, se necessário:

cd /home/labex/project/ssh-lab

Coloque um comando entre aspas depois do host. O SSH o executará remotamente e retornará a saída ao seu terminal local:

ssh remoteuser@localhost 'whoami; uname -srm; uptime'

Digite RemoteLab123! quando solicitado. Os pontos e vírgulas separam os comandos interpretados pelo shell remoto.

Execute um segundo comando remoto e redirecione a saída retornada para um arquivo local:

ssh remoteuser@localhost 'printf "remote_user=%s\nremote_home=%s\n" "$(whoami)" "$HOME"' > remote-context.txt

Digite a senha novamente. O redirecionamento > é processado pelo shell local, portanto remote-context.txt será criado no espaço de trabalho local:

cat remote-context.txt

O arquivo deverá identificar remoteuser e /home/remoteuser.

Transfira um arquivo com SCP

Nesta etapa, você enviará um arquivo local, verificará seu conteúdo remotamente e fará o download com um novo nome local.

Crie uma amostra de configuração local:

cd /home/labex/project/ssh-lab
printf 'mode=training\nport=8080\n' > app.conf

O SCP usa user@host:path para indicar um caminho remoto. Envie o arquivo para o diretório remoto incoming, que já está preparado:

scp app.conf remoteuser@localhost:/home/remoteuser/incoming/app.conf

Digite RemoteLab123! quando solicitado. Confirme o conteúdo remoto por meio do SSH:

ssh remoteuser@localhost 'cat /home/remoteuser/incoming/app.conf'

Digite a senha novamente. Agora inverta a origem e o destino para fazer o download do arquivo:

scp remoteuser@localhost:/home/remoteuser/incoming/app.conf downloaded-app.conf

Digite a senha e compare o arquivo original local com a cópia baixada:

cmp app.conf downloaded-app.conf && echo "The files match"

Transfira um diretório recursivamente

Nesta etapa, você usará o modo recursivo do SCP para copiar uma árvore de diretórios para a conta remota.

Crie uma pequena árvore de projeto local:

cd /home/labex/project/ssh-lab
mkdir -p site/assets
printf '<h1>SSH transfer practice</h1>\n' > site/index.html
printf 'body { color: navy; }\n' > site/assets/style.css

A opção -r copia diretórios e seu conteúdo recursivamente:

scp -r site remoteuser@localhost:/home/remoteuser/incoming/

Digite RemoteLab123! quando solicitado. Liste a árvore remota com um comando SSH executado uma única vez:

ssh remoteuser@localhost 'find /home/remoteuser/incoming/site -type f -printf "%P\n" | sort'

Digite a senha novamente. Você deverá ver assets/style.css e index.html.

Gere uma chave SSH pessoal

Nesta etapa, você criará um par de chaves ED25519 dedicado e verificará suas permissões e sua impressão digital.

Um par de chaves contém uma chave privada, que permanece com você, e uma chave pública, que pode ser instalada em uma conta remota. Gere uma chave dedicada para prática, sem uma frase secreta, para que a validação automatizada possa usá-la:

mkdir -p ~/.ssh
chmod 700 ~/.ssh
ssh-keygen -t ed25519 -f ~/.ssh/labex_remote_ed25519 -N '' -C 'labex-remote-practice'

A opção -t seleciona o algoritmo, -f seleciona o arquivo, -N '' define uma frase secreta de prática vazia e -C adiciona um rótulo. Em chaves de produção, normalmente você deve usar uma frase secreta forte quando as restrições de automação não proibirem isso.

Inspecione os dois arquivos e suas permissões:

ls -l ~/.ssh/labex_remote_ed25519 ~/.ssh/labex_remote_ed25519.pub

A chave privada deve ser legível somente por labex. O arquivo .pub foi feito para ser compartilhado. Exiba a impressão digital da chave pública:

ssh-keygen -lf ~/.ssh/labex_remote_ed25519.pub

Nunca copie nem divulgue a chave privada.

Instale e use a chave pública

Nesta etapa, você instalará a chave pública para remoteuser, conectará sem um prompt de senha e verificará a transferência de arquivos baseada em chave.

O ssh-copy-id acrescenta uma chave pública a ~/.ssh/authorized_keys da conta remota com permissões adequadas:

ssh-copy-id -i ~/.ssh/labex_remote_ed25519.pub remoteuser@localhost

Digite RemoteLab123! para esta última ação autenticada por senha. Teste a chave privada dedicada com -i:

ssh -i ~/.ssh/labex_remote_ed25519 remoteuser@localhost 'printf "key authentication works\n" > ~/ssh-lab/key-authenticated.txt; cat ~/ssh-lab/key-authenticated.txt'

Esse comando não deverá solicitar a senha da conta remota. Use a mesma identidade com o SCP:

scp -i ~/.ssh/labex_remote_ed25519 remoteuser@localhost:~/ssh-lab/key-authenticated.txt key-authenticated.txt
cat key-authenticated.txt

O arquivo baixado deverá conter key authentication works. A chave de host autentica o servidor; sua chave privada autentica você na conta remota. Elas resolvem problemas de confiança diferentes.

Resumo

Você verificou uma chave de host SSH, abriu e encerrou um shell remoto, executou comandos remotos de uma só vez e distinguiu o redirecionamento local da execução remota. Você também enviou e baixou arquivos com SCP e copiou um diretório recursivamente.

Além disso, você gerou um par de chaves ED25519 dedicado, protegeu a chave privada, instalou somente a chave pública e reutilizou essa identidade para SSH e SCP sem senha. Essas são as habilidades básicas necessárias para uma administração remota segura.