Blog DLN Cloud

Copiar arquivos com segurança pelo ssh

Aprenda a transferir arquivos do computador para o servidor usando os comandos scp e sftp com a segurança do ssh

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.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *