Copiar arquivos com segurança pelo ssh
Neste tutorial, você aprenderá por meio de exemplos práticos a transferir arquivos entre servidores ou de um computador com linux instalado para um servidor usando o protocolo SSH no Linux. Você também verá como instalar o pacote OpenSSH no linux.
Instalar cliente ssh
Antes de começarmos, você precisará ter os comandos scp e sftp instalados em seu sistema para conseguir transferir arquivos para o servidor. Para isso é necessário instalar o pacote OpenSSH Clients.
Para instalar o pacote OpenSSH Clients na distribuição linux debian ou ubuntu execute o comando abaixo logado como root:
apt install openssh-client
Se quer transferir arquivos de um computador ou servidor que tem o Red Hat Enterprise Linux instalado, instale o pacote openssh-clients:
dnf install openssh-clients
Instalar ssh no servidor
O pacote OpenSSH Server precisará ser instalado se você quiser que seu computador aceite conexões SSH de entrada. Para o tutorial funcionar instale o OpenSSH Server no computador ou servidor que será o destino dos arquivos transferidos.
Para instalar o pacote OpenSSH Server na distribuição linux debian ou ubuntu execute o comando abaixo logado como root:
apt install openssh-server
Para instalar o OpenSSH Server na distribuição linux Red Hat Enterprise Linux ou em distribuições linux baseadas na red hat, instale o pacote openssh-server:
dnf install openssh-server
Copiar arquivos usando o comando scp
O comando scp funciona através do protocolo SSH e é usado para copiar arquivos e diretórios de ou para um sistema remoto. Ele funciona de maneira muito semelhante ao comando cp, exceto que copia arquivos de ou para outros sistemas que estão em sua rede local ou em algum lugar da Internet.
A sintaxe do comando é:
scp arquivo usuário@ip:diretório
arquivo – É o arquivo ou diretório que será copiado do sistema local para o sistema remoto.
usuário – É o nome da conta de usuário do sistema remoto usado para se autenticar pelo ssh.
ip – É o endereço IP do sistema remoto.
diretório – É a localização completa do diretório no sistema remoto onde o arquivo copiado do sistema local vai ficar armazenado.
IMPORTANTE:
ao tentar copiar um arquivo ou diretório para o sistema remoto, lembre-se que é necessário que a conta de usuário usada pelo sistema remoto tem que ter permissão para acessar e gravar no sistema remoto.
O Primeiro exemplo para demonstrar o uso do comando scp é copiar um arquivo no sistema local, no exemplo é o arquivo /etc/services
para o diretório /home/dlncloud localizado no servidor remoto que tem endereço IP 192.168.0.39
.
scp /etc/services [email protected]:/home/dlncloud
[email protected]'s password:
services 100% 14KB 15.4MB/s 00:00
Veja na saída que após se autenticar o nome do arquivo copiado é exibido e o status de transferência é informado.
Para copiar um diretório e todo o conteúdo do diretório em vez de um arquivo do sistema local para o sistema remoto, você precisará usar a opção -r do comando scp. por exemplo para transferir o diretório /etc/apt/sources.list.d e todo o seu conteúdo para o servidor que tem o IP 192.168.0.39, o comando fica:
scp -r /etc/apt/sources.list.d/ [email protected]:/home/dlncloud
[email protected]'s password:
java-oracle.list 100% 189 625.2KB/s 00:00
python.list 100% 81 267.6KB/s 00:00
O Exemlo final é copiar um arquivo do sistema remoto em nosso sistema local, tudo o que precisamos fazer é inverter a ordem do comando. No exemplo a seguir será copiado o arquivo /etc/hosts do sistema remoto que tem o endereço IP 192.168.0.39 para o diretório /tmp do sistema local, o comando é executado no sistema local, como visto abaixo.
scp [email protected]:/etc/hosts /tmp
[email protected]'s password:
hosts 100% 265 264.2KB/s 00:00
Transferir arquivos usando sftp (SSH File Transfer Protocol)
O comando sftp é usado para transferir arquivos e também executar comandos no sistema remoto, semelhante ao comando ftp, executando todas as operações em um transporte criptografado pelo ssh.
A sintaxe para se conectar ao sistema remoto é:
sftp user@host:path
user – Nome da conta de usuário do sistema remoto usado para se autenticar pelo ssh.
host – Endereço IP do sistema remoto.
path – Localização completa do diretório do sistema remoto que será acessado após autenticação.
Para poder usar o comando sftp no sistema remoto é necessário habilita-lo no arquivo de configuração /etc/ssh/sshd_config do serviço ssh do sistema remoto. para habilita-lo basta encontrar a linha “Subsystem sftp” e descomenta-la, no debian ou ubuntu é uma linha como a seguir:
Subsystem sftp /usr/lib/openssh/sftp-server
Por padrão a função sftp é habilita quando o OpenSSH Server é instalado, se não tiver habilitada descomente a linha informada acima e em seguida reinicie o ssh:
systemctl restart ssh.service
Se no momento de executar o comando sftp nenhum caminho for especificado, ou se o caminho for um diretório, o sftp efetuará login no host especificado e entrará no modo de comando interativo, mudando para o diretório remoto se um tiver sido especificado.
Para conectar-se ao sistema remoto que tem o endereço IP 192.168.0.39 e após se autenticar acessar o diretório /tmp o comando completo é sftp [email protected]/tmp
sftp [email protected]/tmp
[email protected]'s password:
Connected to 192.168.0.39.
Changing to: /tmp
sftp>
A partir desse momento você está acessando o sistema remoto e esse sftp> que você vê no inicio de cada linha é o indicativo do prompt de comando do sftp. E tudo que digitar é um comando interno do comando sftp.
Para encerrar a conexão e voltar ao sistema local, use o comando quit:
sftp> quit
Para acessar o sistema remoto sem alterar para um diretório especifico digite somente o comando sftp nome_do_usuário@ip_do_sistema_remoto. o comando sfp vai alterar para o diretório home da conta usuário que usou para se autenticar.
sftp [email protected]
[email protected]'s password:
Connected to 192.168.0.39.
sftp>
Nesse exemplo após acessar o sistema remoto, o comando sftp vai alterar para o diretório home do usuário dlncloud, para confirmar você pode usar o comando pwd, que vai informar o diretório que está sendo acessado:
sftp> pwd
Remote working directory: /home/dlncloud
para listar o conteúdo do diretório que está acessando use o comando ls:
sftp> ls
services sources.list.d
A saída exibe o arquivo services e o diretório sources.list.d que foram copiados com o comando scp nesse tutorial.
Para remover um arquivo podemos usar o comando rm no prompt de comando do sftp:
sftp> rm services
Removing /home/dlncloud/services
Também podemos executar comandos do sistema remoto, para isso basta incluir antes do comando o ponto de exclamação “!”. por exemplo, executar o comando ping:
sftp> !ping -c 5 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes de 8.8.8.8: icmp_seq=1 ttl=55 tempo=41.0 ms
64 bytes de 8.8.8.8: icmp_seq=2 ttl=55 tempo=39.3 ms
64 bytes de 8.8.8.8: icmp_seq=3 ttl=55 tempo=40.4 ms
64 bytes de 8.8.8.8: icmp_seq=4 ttl=55 tempo=40.6 ms
64 bytes de 8.8.8.8: icmp_seq=5 ttl=55 tempo=39.6 ms
--- 8.8.8.8 estatísticas de ping ---
5 pacotes transmitidos, 5 recebidos, 0% perda de pacote, tempo 4005ms
rtt min/avg/max/mdev = 39.263/40.147/40.965/0.639 ms
Por fim para visualizar todos os comandos que podem ser executados no prompt de comando do sftp, use o comando help:
sftp> help
Available commands:
bye Quit sftp
cd path Change remote directory to 'path'
chgrp [-h] grp path Change group of file 'path' to 'grp'
chmod [-h] mode path Change permissions of file 'path' to 'mode'
chown [-h] own path Change owner of file 'path' to 'own'
df [-hi] [path] Display statistics for current directory or
filesystem containing 'path'
exit Quit sftp
get [-afpR] remote [local] Download file
help Display this help text
lcd path Change local directory to 'path'
lls [ls-options [path]] Display local directory listing
lmkdir path Create local directory
ln [-s] oldpath newpath Link remote file (-s for symlink)
lpwd Print local working directory
ls [-1afhlnrSt] [path] Display remote directory listing
lumask umask Set local umask to 'umask'
mkdir path Create remote directory
progress Toggle display of progress meter
put [-afpR] local [remote] Upload file
pwd Display remote working directory
quit Quit sftp
reget [-fpR] remote [local] Resume download file
rename oldpath newpath Rename remote file
reput [-fpR] local [remote] Resume upload file
rm path Delete remote file
rmdir path Remove remote directory
symlink oldpath newpath Symlink remote file
version Show SFTP version
!command Execute 'command' in local shell
! Escape to local shell
? Synonym for help
Os comandos scp e sftp são úteis para tarefas do dia-dia de um profissional que precisa transferir arquivos para um servidor remoto ou de um servidor remoto para o sistema local com criptografia, que torna a tarefa mais segura.