===== Exemplos dos comandos ssh e scp =====
==== Nível Básico ====
* **Conectar-se a um servidor remoto com `ssh`:**
- ssh usuario@servidor_remoto
- Conecta-se ao servidor `servidor_remoto` com o usuário `usuario`.
* **Copiar um arquivo para um servidor remoto com `scp`:**
- scp arquivo.txt usuario@servidor_remoto:/caminho/destino/
- Copia o arquivo `arquivo.txt` para o diretório `/caminho/destino/` no servidor remoto.
* **Copiar um arquivo de um servidor remoto para a máquina local com `scp`:**
- scp usuario@servidor_remoto:/caminho/arquivo.txt ./
- Copia o arquivo `arquivo.txt` do servidor remoto para o diretório atual da máquina local.
* **Conectar-se a um servidor remoto em uma porta diferente com `ssh`:**
- ssh -p 2222 usuario@servidor_remoto
- Conecta-se ao servidor `servidor_remoto` usando a porta `2222` em vez da porta padrão `22`.
==== Nível Intermediário ====
* **Executar um comando remotamente usando `ssh`:**
- ssh usuario@servidor_remoto 'comando_a_ser_executado'
- Conecta-se ao servidor e executa o comando `comando_a_ser_executado` no servidor remoto sem iniciar um shell interativo.
* **Copiar um diretório inteiro para um servidor remoto com `scp`:**
- scp -r /caminho/diretorio usuario@servidor_remoto:/caminho/destino/
- Copia recursivamente o diretório local `/caminho/diretorio` para o servidor remoto.
* **Transferir múltiplos arquivos de uma só vez com `scp`:**
- scp arquivo1.txt arquivo2.txt usuario@servidor_remoto:/caminho/destino/
- Copia os arquivos `arquivo1.txt` e `arquivo2.txt` para o servidor remoto.
* **Transferir um arquivo através de uma porta específica com `scp`:**
- scp -P 2222 arquivo.txt usuario@servidor_remoto:/caminho/destino/
- Usa a porta `2222` para transferir o arquivo para o servidor remoto.
* **Encaminhar portas locais para o servidor remoto com `ssh` (Port Forwarding):**
- ssh -L 8080:localhost:80 usuario@servidor_remoto
- Encaminha a porta local `8080` para a porta `80` do servidor remoto, permitindo acessar o serviço do servidor localmente.
==== Nível Avançado ====
* **Executar um comando como superusuário no servidor remoto com `ssh`:**
- ssh usuario@servidor_remoto 'sudo comando_a_ser_executado'
- Conecta-se ao servidor remoto e executa um comando como superusuário (`sudo`).
* **Copiar arquivos grandes com verificação de progresso com `scp`:**
- scp -v arquivo_grande.iso usuario@servidor_remoto:/caminho/destino/
- Exibe o progresso detalhado da transferência do arquivo `arquivo_grande.iso` para o servidor remoto.
* **Usar uma chave SSH específica para conectar com `ssh`:**
- ssh -i ~/.ssh/minha_chave.pem usuario@servidor_remoto
- Conecta-se ao servidor remoto usando a chave privada `minha_chave.pem`.
* **Transferir um arquivo de um servidor para outro usando `scp`:**
- scp usuario1@servidor1:/caminho/arquivo.txt usuario2@servidor2:/caminho/destino/
- Copia o arquivo de um servidor remoto para outro servidor remoto diretamente.
* **Copiar arquivos entre servidores intermediários com `ssh` e `scp` (ProxyCommand):**
- scp -o ProxyCommand="ssh usuario@proxy nc servidor_final 22" arquivo.txt usuario@servidor_final:/caminho/destino/
- Usa um servidor intermediário (proxy) para transferir arquivos ao destino final.
* **Transferir arquivos grandes com compressão habilitada via `scp`:**
- scp -C arquivo_grande.tar.gz usuario@servidor_remoto:/caminho/destino/
- Usa compressão para transferir o arquivo `arquivo_grande.tar.gz` de forma mais eficiente.
==== Nível Especializado ====
* **Criar um túnel SSH reverso com `ssh`:**
- ssh -R 9090:localhost:80 usuario@servidor_remoto
- Cria um túnel reverso onde a porta `9090` no servidor remoto é redirecionada para a porta `80` da máquina local.
* **Montar um diretório remoto via SSH usando `sshfs`:**
- sshfs usuario@servidor_remoto:/caminho/diretorio_remoto /mnt/diretorio_local
- Monta o diretório do servidor remoto na máquina local usando o protocolo SSH, tornando o diretório acessível como se fosse local.
* **Executar um comando em vários servidores simultaneamente usando `ssh`:**
- for servidor in servidor1 servidor2 servidor3; do ssh usuario@$servidor 'comando_a_ser_executado'; done
- Executa um comando em múltiplos servidores em sequência.
* **Criar um túnel SSH para acessar serviços de rede privados com `ssh`:**
- ssh -D 1080 usuario@servidor_remoto
- Cria um proxy SOCKS na porta `1080` da máquina local, permitindo encaminhar o tráfego de rede para o servidor remoto através do SSH.
* **Transferir arquivos através de múltiplos servidores com `scp` (JumpHost):**
- scp -o "ProxyJump usuario@proxy" arquivo.txt usuario@servidor_final:/caminho/destino/
- Usa o comando `ProxyJump` para transferir arquivos através de um servidor intermediário para o servidor final.
* **Usar `rsync` sobre SSH para sincronizar diretórios de forma eficiente:**
- rsync -avz -e ssh /diretorio_local usuario@servidor_remoto:/caminho/destino
- Sincroniza diretórios entre a máquina local e o servidor remoto usando o protocolo SSH, com compressão e preservação de permissões.