Comando scp: uso e opções, copiar pastas e definir a porta

Ambiente de testeFamília RHELAlmaLinux 9.8OpenSSH 9.9p1Lado receptor Debian 12 · OpenSSH 9.2p1conta rootVerificado em 2026-10-28

O scp é a ferramenta de cópia usada para trocar arquivos com um servidor ao qual você se conecta por SSH. Ao enviar um arquivo com o comando scp, você escreve primeiro a origem e depois o destino, como no cp. Ao enviarmos arquivos e pastas de um servidor AlmaLinux 9 para um servidor Debian 12 e trazê-los de volta, a transferência foi feita pelo protocolo SFTP e um arquivo de 20MB chegou em menos de 1 segundo.

Toda a saída abaixo é o resultado exato do scp do OpenSSH 9.9 executado com a conta root no lado emissor. Apenas os endereços de servidor e os nomes de conta foram trocados por valores de exemplo.

1️⃣ Uso do scp e caminhos remotos

Antes de um caminho no servidor remoto, coloque [conta@endereço do servidor:]. Um caminho sem dois-pontos é entendido como um caminho do servidor onde você executou o comando, então o lado com os dois-pontos define se é envio ou recebimento.

🧭 Direção da cópia no scp e caminhos remotos
Diagrama explicativo
↔️ Direção da cópia
$ scp report.txt user@203.0.113.10:~/scp-test/user@203.0.113.10:~/scp-test/report.txt ./downloads/-3 user@203.0.113.10:~/scp-test/report.txt user@198.51.100.20:~/scp-test/
origem💻 Servidor que executa o comandoreport.txt
➜
destino🖥️ Servidor remoto203.0.113.10:~/scp-test/
origem🖥️ Servidor remoto203.0.113.10:~/scp-test/report.txt
➜
destino💻 Servidor que executa o comando./downloads/
origem🖥️ Servidor remoto A203.0.113.10:~/scp-test/report.txt
➜
Intermediário💻 Servidor que executa o comando-3
➜
destino🖥️ Servidor remoto B198.51.100.20:~/scp-test/
🧩 Formato do caminho remoto
user a conta usada na conexão, 203.0.113.10 o endereço do servidor ou domínio, :~/scp-test/ e depois dos dois-pontos, o caminho naquele servidor (o til é a pasta home)
Com o arquivo local primeiro e o caminho remoto depois, é um envio. Se o caminho depois dos dois-pontos terminar em barra, o arquivo é salvo dentro dessa pasta com o mesmo nome.
Com o caminho remoto primeiro, é um recebimento. O arquivo recebido fica no caminho local escrito depois.
Quando origem e destino são servidores remotos, a partir do OpenSSH 8.7 os dados passam pelo servidor que executa o comando. É o mesmo método de quando se adiciona -3.

Envia report.txt da pasta atual para a pasta scp-test dentro da home do servidor remoto.

scp report.txt user@203.0.113.10:~/scp-test/
report.txt                                    100%   14     5.1KB/s   00:00

Ao terminar a transferência, o nome do arquivo, o progresso, o tamanho, a velocidade e o tempo gasto aparecem em uma linha. Este indicador de progresso só aparece quando se executa em um terminal. Por isso, se você redirecionar a saída para um arquivo, nada fica nesse arquivo.

Para receber, escreva primeiro o caminho remoto e depois o caminho local onde salvar.

scp user@203.0.113.10:~/scp-test/report.txt ./downloads/
report.txt                                    100%   14     2.7KB/s   00:00

Se o caminho de destino terminar em um nome de arquivo e não em uma pasta, o arquivo é salvo com esse nome. Depois de enviar com o comando abaixo, report.txt ficou na pasta do lado receptor com o nome report-1028.txt.

scp report.txt user@203.0.113.10:~/scp-test/report-1028.txt
report.txt                                    100%   14     4.6KB/s   00:00

🔲 Simulador do comando scp

No simulador abaixo, você pode digitar comandos de envio, recebimento e cópia de pastas e conferir a saída de cada opção.

Simulador do comando scpOpenSSH 9.9
[root@server work]#
Funciona apenas no navegador. Veja os arquivos do lado remoto na lista à esquerda e use ↑↓ para recuperar comandos anteriores.

2️⃣ Opções do comando scp

As opções vão logo depois de scp, antes da origem. -P, que define a porta, é maiúscula, e -p minúscula preserva horários e permissões, então trocar a caixa executa outra ação.

-l define o limite de velocidade de transferência em Kbit/s. Sem opções, um arquivo de 20MB terminou de ser transferido em menos de 1 segundo.

scp backup.tar.gz user@203.0.113.10:~/scp-test/
backup.tar.gz                                 100%   20MB  53.6MB/s   00:00

-l 8000 equivale a cerca de 1,000KB por segundo. Ao enviar o mesmo arquivo com -l 8000, o indicador de progresso mostrou 996.5KB/s e a transferência levou 20 segundos.

scp -l 8000 backup.tar.gz user@203.0.113.10:~/scp-test/backup-l.tar.gz
backup.tar.gz                                 100%   20MB 996.5KB/s   00:20

-C comprime os dados na conexão SSH do mesmo modo que o gzip. Ao enviar três vezes um arquivo de log de 19MB com frases repetidas, entre estes dois servidores os envios com -C foram um pouco mais lentos.

ComandoArquivoTempo de execuçãoVelocidade no indicador de progresso
scp backup.tar.gz20MB0,68 s53.6MB/s
scp -l 8000 backup.tar.gz20MB20.82 s996.5KB/s
scp access.log (3 vezes)19MB0.79~0.89 s—
scp -C access.log (3 vezes)19MB0.84~0.97 s—

O tempo de execução vai do início do comando até a conexão e o fim da transferência. O manual do ssh também explica que a compressão ajuda em linhas lentas e atrasa a transferência em redes rápidas.

-v mostra o processo da conexão à transferência em linhas debug1, então serve para achar a causa quando a conexão falha ou para na autenticação. Como a saída é longa, selecionamos com grep apenas as linhas de autenticação e transferência.

scp -v report.txt user@203.0.113.10:~/scp-test/ 2>&1 | grep -E 'Authenticated|Sending|Transferred'
Authenticated to 203.0.113.10 ([203.0.113.10]:22) using "publickey".
debug1: Sending subsystem: sftp
Transferred: sent 2536, received 3248 bytes, in 0.1 seconds

A linha [Sending subsystem: sftp] significa que o scp enviou o arquivo pelo protocolo SFTP. A partir do OpenSSH 9.0, o scp usa SFTP por padrão. Com -O, a transferência usa o antigo protocolo SCP e [Sending command: scp -v -t] aparece no mesmo lugar.

scp -O -v report.txt user@203.0.113.10:~/scp-test/ 2>&1 | grep -E 'Authenticated|Sending|Transferred'
Authenticated to 203.0.113.10 ([203.0.113.10]:22) using "publickey".
debug1: Sending command: scp -v -t ~/scp-test/
Sending file modes: C0600 14 report.txt
Transferred: sent 2328, received 3036 bytes, in 0.1 seconds

📌 Principais opções: resultados deste artigo

OpçãoTarefaResultado neste artigo
-PDefine a porta de conexão SSHPorta 22 concluiu o envio de report.txt; a porta fechada 2222 terminou com [Connection timed out]
-iDefine o arquivo de chave privada para a autenticação por chave públicaEnvio de report.txt concluído definindo ~/.ssh/id_ed25519
-rCopia os arquivos e subpastas da pastaAs pastas css e images ficam no lado receptor com a estrutura original; sem a opção, o erro [not a regular file] impede a transferência
-pPreserva o horário de modificação, o de acesso e as permissões da origemHorário de modificação preservado; no lado receptor deste artigo, a permissão 600 só foi mantida no arquivo enviado com -O -p
-CComprime os dados na conexão SSHNo log de 19MB entre os dois servidores deste artigo, o envio com a opção foi um pouco mais lento
-lDefine o limite de velocidade de transferência em Kbit/sCom -l 8000, 20MB a 996.5KB/s em 20.82 segundos
-vMostra o processo da conexão à transferência em linhas debug1Transferência SFTP confirmada pela linha [Sending subsystem: sftp]
-3Transfere os dados entre dois servidores remotos passando pelo servidor que executa o comando (padrão desde o OpenSSH 8.7)Envio de report.txt concluído com duas pastas do mesmo servidor como origem e destino
-OTransfere pelo antigo protocolo SCP[Sending command: scp -v -t] aparece na saída de -v; caminhos com espaços precisam de mais uma barra invertida
-oPassa ao ssh uma opção no formato ssh_configEspera definida em 10 segundos com ConnectTimeout=10 e [Connection timed out] confirmado

📎 Outras opções: segundo o manual oficial

OpçãoTarefa
-qDesativa o indicador de progresso e os avisos e mensagens de diagnóstico do ssh
-JConecta-se primeiro a um host de salto e de lá configura o encaminhamento TCP até o destino final (forma abreviada da configuração ProxyJump; separe vários saltos com vírgulas)
-FDefine outro arquivo como arquivo de configuração por usuário do ssh (passado diretamente ao ssh)
-4Força o uso apenas de endereços IPv4
-6Força o uso apenas de endereços IPv6

3️⃣ Copiar pastas com scp e preservar horários

Se você indicar uma pasta sem opções, o scp mostra um erro dizendo que não é um arquivo comum e não faz a transferência.

scp site-files user@203.0.113.10:~/scp-test/
scp: local "site-files" is not a regular file
scp: failed to upload file site-files to ~/scp-test/

Com -r, os arquivos e subpastas da pasta são copiados.

scp -r site-files user@203.0.113.10:~/scp-test/
logo.png                                      100%   48KB   4.7MB/s   00:00
style.css                                     100%   15     5.0KB/s   00:00
index.html                                    100%   15     5.2KB/s   00:00

A saída mostra apenas nomes de arquivos. Na saída do find no lado receptor, as pastas css e images estavam em site-files com a estrutura original.

ssh user@203.0.113.10 'cd ~/scp-test && find site-files'
site-files
site-files/images
site-files/images/logo.png
site-files/index.html
site-files/css
site-files/css/style.css

-r segue os links simbólicos da pasta e copia os arquivos originais, então para pastas em que os links devem continuar sendo links, use rsync -a.

-p preserva o horário de modificação, o de acesso e as permissões da origem. Antes de enviar, ajustamos o report.txt original para o horário de modificação 1º de outubro de 2026 00:00 (UTC) e as permissões 600. Como o fuso horário do servidor receptor é UTC, o ls do lado emissor também foi executado com TZ=UTC.

TZ=UTC ls -l report.txt
-rw------- 1 root root 14 Oct  1 00:00 report.txt
scp -p report.txt user@203.0.113.10:~/scp-test/report-p.txt
report.txt                                    100%   14     4.7KB/s   00:00
scp -O -p report.txt user@203.0.113.10:~/scp-test/report-Op.txt
report.txt                                    100%   14     4.2KB/s   00:00
ssh user@203.0.113.10 'ls -l ~/scp-test/report.txt ~/scp-test/report-p.txt ~/scp-test/report-Op.txt'
-rw------- 1 user user 14 Oct  1 00:00 /home/user/scp-test/report-Op.txt
-rw-rw-r-- 1 user user 14 Oct  1 00:00 /home/user/scp-test/report-p.txt
-rw-rw-r-- 1 user user 14 Oct 28 06:17 /home/user/scp-test/report.txt

report-p.txt, enviado com -p, e report-Op.txt, enviado com -O -p, mantiveram o horário original, e report.txt, enviado sem opções, foi salvo com o horário do envio. No servidor receptor, os arquivos enviados por SFTP ficaram com permissões 664 mesmo com -p, e só o arquivo enviado pelo antigo protocolo SCP (-O) manteve 600.

Por isso, nos arquivos cujas permissões precisam ser iguais às da origem, confira as permissões com ls -l no lado receptor depois de enviar.

4️⃣ Definir porta e arquivo de chave no scp

Em servidores que não aceitam conexão com a porta 22 e a chave padrão, defina a porta e a chave antes de enviar. -P define a porta de conexão SSH e -i define o arquivo de chave privada para a autenticação por chave pública.

Abaixo está um exemplo que define diretamente a porta 22 e um arquivo de chave. Em um servidor com a porta alterada, escreva esse número no lugar de 22.

scp -P 22 -i ~/.ssh/id_ed25519 report.txt user@203.0.113.10:~/scp-test/
report.txt                                    100%   14     5.3KB/s   00:00

Sem -i, assim como o ssh, ele usa em ordem as chaves com nomes padrão em ~/.ssh (id_rsa, id_ecdsa, id_ed25519 etc.).

Se você envia com frequência para o mesmo servidor, escreva um alias em ~/.ssh/config e digite no scp apenas o alias.

Host myserver
    HostName 203.0.113.10
    User user
    Port 22
    IdentityFile ~/.ssh/id_ed25519

O nome da linha Host vira o alias, e as quatro linhas abaixo substituem o endereço do servidor, a conta, a porta e o arquivo de chave. O comando só com o alias terminou com o mesmo resultado de uma linha de quando escrevemos o endereço e a chave completos.

scp report.txt myserver:~/scp-test/
report.txt                                    100%   14     4.2KB/s   00:00

-P, -i e os alias usam as configurações de conexão do ssh como estão, então o processo de criar uma chave e registrá-la no servidor também é igual ao da conexão com o comando SSH.

5️⃣ Cópia entre servidores com scp

Mesmo quando origem e destino são servidores remotos, uma linha de scp basta para copiar. A partir do OpenSSH 8.7, os dados são transferidos pelo servidor que executa o comando, e esse método é o -3. As notas de versão oficiais citam como motivo da mudança do padrão não ser preciso deixar as credenciais do servidor de destino no servidor de origem.

A medição abaixo foi feita com duas pastas do mesmo servidor como origem e destino. Se o servidor de destino for outro, troque apenas a conta e o endereço do final.

scp -3 user@203.0.113.10:~/scp-test/report.txt user@203.0.113.10:~/scp-test/copy3/
report.txt                                    100%   14     2.5KB/s   00:00

É como a matriz receber os documentos entre duas filiais e reenviá-los.

O método antigo, em que o servidor de origem envia diretamente ao servidor de destino, é definido com -R. Esse método exige que o servidor de origem consiga se conectar ao de destino sem senha. A partir do OpenSSH 10.6, usar -R mostra um aviso de descontinuação, e versões futuras devem ignorar essa opção e copiar com o método -3.

6️⃣ Comparação entre scp e rsync

Para enviar alguns arquivos uma vez, o scp basta; para sincronizar várias vezes a mesma pasta ou retomar uma transferência interrompida, use o comando rsync. O scp reenvia todos os arquivos indicados a cada execução, enquanto o rsync compara origem e destino e transfere apenas os arquivos alterados.

Itemscprsync
Escopo da transferênciaTodos os arquivos indicados a cada execuçãoApenas arquivos alterados em relação à origem
Manter arquivos recebidos pela metade (--partial)❌✅
Excluir arquivos que não estão na origem (--delete)❌✅
Links simbólicosSegue e copia os arquivos originaisCom -a, mantém os links
Necessário no lado receptorAcesso SSH e servidor SFTPrsync instalado nos dois lados

7️⃣ Mensagens de erro do comando scp e soluções

Quando o scp falha, a causa aparece direto na primeira linha da saída. Nos três casos em que provocamos erros de propósito com arquivo inexistente, permissão de escrita e porta errada, a causa apareceu na primeira linha, e o código de saída nunca foi 0.

🔲 No such file or directory

Se você tentar receber um arquivo que não existe no lado remoto, [No such file or directory] é mostrado com o caminho.

scp user@203.0.113.10:~/scp-test/nofile.txt ./downloads/
scp: ~/scp-test/nofile.txt: No such file or directory

Ao enviar, se a pasta de destino não existir, ocorre o mesmo erro. O scp não cria pastas ausentes, então execute antes mkdir -p pelo ssh para criar a pasta.

scp report.txt user@203.0.113.10:~/scp-test/nodir/sub/
scp: dest open "scp-test/nodir/sub/": No such file or directory
scp: failed to upload file report.txt to ~/scp-test/nodir/sub/

🔲 Permission denied

Se a pasta do lado receptor não tiver permissão de escrita, [Permission denied] vem depois de [dest open]. Abaixo está o resultado do envio para uma pasta readonly com permissões 555.

scp report.txt user@203.0.113.10:~/scp-test/readonly/
scp: dest open "scp-test/readonly/report.txt": Permission denied
scp: failed to upload file report.txt to ~/scp-test/readonly/

Se [conta@endereço do servidor:] vier antes de [Permission denied] e houver um método de autenticação como publickey entre parênteses, a conexão foi recusada na etapa de autenticação. Esse texto é o formato que o programa ssh usa quando a autenticação falha, então confira primeiro o arquivo de chave definido com -i e a chave pública registrada no servidor.

🔲 Connection timed out

Se o número da porta estiver errado ou um firewall bloquear essa porta e não houver resposta, o scp espera a conexão e termina com [Connection timed out]. Abaixo está o resultado do envio para a porta fechada 2222 com espera de 10 segundos.

scp -P 2222 -o ConnectTimeout=10 report.txt user@203.0.113.10:~/scp-test/
ssh: connect to host 203.0.113.10 port 2222: Connection timed out
scp: Connection closed

Se esse erro aparecer, confira primeiro se o número escrito em -P é igual à porta SSH do servidor.

🔲 Espaços e til (~) nos caminhos

No scp atual, que transfere por SFTP, basta colocar uma vez entre aspas simples o caminho remoto com espaços.

scp report.txt 'user@203.0.113.10:~/scp-test/my files/'
report.txt                                    100%   14     4.7KB/s   00:00

Ao adicionar -O ao mesmo comando para enviar pelo antigo protocolo SCP, houve falha com [ambiguous target]. Isso acontece porque, no antigo protocolo SCP, o shell remoto interpreta o caminho mais uma vez.

scp -O report.txt 'user@203.0.113.10:~/scp-test/my files/'
scp: ambiguous target

Nesse caso, coloque uma barra invertida antes do espaço para que o shell remoto também leia tudo como uma só palavra.

scp -O report.txt 'user@203.0.113.10:~/scp-test/my\ files/'
report.txt                                    100%   14     4.5KB/s   00:00

Se o caminho depois dos dois-pontos começar sem barra nem til, ele é tratado a partir da pasta home da conta remota.

scp report.txt user@203.0.113.10:scp-test/report-rel.txt
report.txt                                    100%   14     5.6KB/s   00:00

O manual oficial orienta usar -O quando um servidor SFTP antigo não consegue converter em pasta home um caminho que começa com til. Nesse caso, escrever o caminho a partir da home sem o til, como acima, também salva no mesmo lugar.

🔢 FAQ & conteúdo recomendado

Se existir um arquivo com o mesmo nome, ele é sobrescrito pelo novo sem pedir confirmação. Ao enviar várias vezes o mesmo report.txt para a mesma pasta, a transferência também ocorreu a cada vez sem perguntar. Por isso, para arquivos que você precisa manter, envie com outro nome no final do caminho de destino.

Se você colocar * no caminho remoto e envolvê-lo em aspas simples, todos os arquivos do servidor remoto com nome correspondente são recebidos. Ao receber report-*.txt do servidor remoto, os seis arquivos correspondentes foram transferidos em sequência. As aspas servem para que o shell do servidor que executa o comando não interprete * antes.

Com -B, o scp roda em modo batch, que não pede senha nem frase secreta. Segundo o manual oficial, não é possível digitar a senha nesse modo, então configure antes a autenticação por chave para tarefas automáticas como o cron.

🧭 Conteúdo recomendado sobre comandos de rede 13 posts · 2 referências
🗂️ Comandos de rede
📄 Comando ip 📄 Comandos netstat · ifconfig 📄 Comando nmtui
📄 Comando SSH 📄 Comando rsync 📄 Comando wget 📄 Comandos rz · sz 📄 Comando scp
📄 Comando host 📄 Comando nslookup
📄 Comando iptables 📄 Comando firewall-cmd 📄 Comando certbot

ℹ️ Aviso de afiliados
O conteúdo deste site contém links de afiliados. Quando um visitante compra um produto ou serviço por meio de um desses links, o site recebe uma comissão do vendedor. O valor que o comprador paga (em promoções, ele diminui ↓) não aumenta por causa disso. Preços, descontos e informações de estoque valem para o momento em que o texto foi escrito e podem ter mudado, por isso confirme com o vendedor antes de comprar. Os produtos são escolhidos e avaliados por critérios próprios, e o recebimento de comissão não influencia a ordem de apresentação nem o conteúdo das avaliações.

Deixe um comentário

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

Demonstre sua humanidade: 2   +   7   =