SSH

Uma das formas de trabalhar remotamente em um computador a partir de outro é utilizando o protocolo SSH (Secure SHell). Veja mais sobre ele e como utilizá-lo em linha de comando no PC e com celular.

O protocolo SSH envolve autenticação do cliente através de senha e todas as trocas de dados são criptografadas – antes, eram usadas as ferramentas Telnet e RSH. O OpenSSH é dividido em dois pacotes (openssh-client e openssh-server), sendo que o meta-pacote ssh depende de ambas as partes e facilita a instalação de ambos através de “apt-get install ssh”. A porta normalmente usada para este protocolo é a 22.

O acesso a arquivos de outro computador pode ocorrer via linha de comando ou no nautilus (interface gráfica para gerenciar arquivos). Isso pode ser realizado digitando-se CTRL+L para aparecer barra de endereços e digitar nela “ssh://usuario@IP”, depois navegue até o diretório desejado.

A opção -X permite abrir janelas de programas no modo gráfico, mesmo em acesso remoto (o sistema gráfico X.org utiliza o protocolo de rede X11). Essa opção pode ser habilitada especificando “X11Forwarding yes” no arquivo de configuração do servidor (/etc/ssh/sshd_config). Veja esse exemplo:

ssh -X nome_do _usuário@IP_do_computador_alvo

Caso apareça a mensagem “X11 connection rejected because of wrong authentication” ou “xauth: file /root/.Xauthority does not exist”, isso significa que o você precisa copiar a autorização do usuário que você logou (user) para o que está usando no momento (root) – é necessário ter o pacote “sudo” instalado e configurado para o usuário:

xauth list | grep unix`echo $DISPLAY | cut -c10-12` > /tmp/xauth
sudo cp /home/user/.Xauthority /root/
sudo xauth add `cat /tmp/xauth`

Outra opção é usar o comando “export XAUTHORITY=/home/locator/.Xauthority” para exportar o conteúdo da autorização do usuário “não-root”.

Em vez do IP do computador alvo, você pode usar o nome da máquina (hostname) seguido de “.local”, como em “ssh hostname.local”. Esse nome é resolvido via “multicast domain name service” (mDNS) ou “Domain Name System” (DNS).

Também é possível configurar atalhos para acesso ssh (bastaria escrever “ssh nome_do_pc”). Para isso, crie o arquivo /home/usuario/.ssh/config com o conteúdo do primeiro conjunto abaixo – o segundo conjunto é um exemplo que permite acessar o computador “pc_final” através de outro, o “pc_inter”:

Host nome_do_pc
 User nome_do_usuario
 HostName número_do_IP
Host pc_final
 User nome_usuario_final
 ProxyCommand ssh nome_usuario_inter@pc_inter nc %h %p

Ao conectar com outro computador, é criada uma chave RSA (algoritmo de criptografia) para validar a conexão das próximas vezes e tornando o processo mais seguro. Caso dê algum conflito por mudança de IP ou alteração no hostname, convém apagar a chave e gerar uma nova. Para isso, execute algum dos comandos abaixo, alterando 3 pelo número da linha informada pela mensagem de erro ou o número de IP pelo hostname/IP desejado:

sed -i '3d' ~/.ssh/known_hosts # Alterar 3 pelo nº da linha
ssh-keygen -f "~/.ssh/known_hosts" -R 192.168.0.10

Para não ter que digitar a senha sempre que precisar se conectar ao computador (SSH sem senha), basta seguir os procedimento abaixo:

ssh-keygen -t rsa # Gerar a chave no PC cliente, caso ela não exista
ssh-copy-id -i usuario@ipdoservidor # Copiar chave para servidor

Uma alternativa para copiar a chave, estilo “old school”:

scp /home/user/.ssh/id_rsa.pub usuario@ipdoservidor:/tmp # Copiar a chave para o PC servidor
ssh usuario@ipdoservidor # Acessar o PC servidor
cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys # Concatenar o conteúdo da chave para o arquivo de clientes autorizados no servidor

Caso necessite acessar remotamente um computador que está ligado em roteador, é preciso acessar o painel de controle do roteador (digitando o IP dele no navegador web e preenchendo usuário e senha) e configurar um “virtual server” para criar número de porta para aquele pc (colocar ip local dele). Assim, o acesso será dado da seguinte forma:

ssh user@ip -p numero_da_porta

Uma forma de entrar por ssh, executar o comando e jogar o resultado num arquivo texto em seu computador:

ssh user@host "du -lh /home/user/*" > resultado.txt

Se quiser executar mais de um comando, coloque-o dentro das aspas separado por “;”.

O SSH também oferece dois serviços de transferência de arquivo: scp e sftp (veja mais no item “Transferência de dados” do post de Comandos de rede Linux.

SSHPASS

Existe uma forma de passar a senha como parâmetro no SSH e scp/rsync, após registro de chave pública, que é através do comando sshpass. Para isso, basta instalar o pacote sshpass e realizar o acesso da seguinte forma:

sshpass -p "senha" rsync -azv --progress user@ip:/caminho/pasta_origem/* /caminho/pasta_destino
# Executar comando remotamente usando sshpass
sshpass -p "senha" ssh -o StrictHostKeyChecking=no user@host command_to_run

Veja mais sobre o comando rsync no item de cópia de arquivos no post de Comandos úteis do Linux.

Acessar celular a partir de computador

O aplicativo SSHelper monta um servidor SSH ao abrir o programa quando instalado no celular. Acessando a aba “configuration”, é possível ver o endereço IP na rede (192.168.1.9, por exemplo) e a porta a ser utilizada (por padrão é a 2222). O usuário e a senha são admin – mas você pode mudar a senha também. Você pode acessar diretamente o celular pelo computador através do comando “ssh -p 2222 admin@192.168.1.9” (nesse caso). Veja alguns exemplos usando SCP para copiar arquivos entre um computador e o celular:

# Copiando arquivo MP3 do PC para celular
scp -P 2222 exemplo.mp3 admin@192.168.1.9:/data/data/com.arachnoid.sshelper/files/home/SDCard/Music
# Baixando todas as fotos/vídeos do celular (câmera) para computador
scp -P 2222 admin@192.168.1.9:/data/data/com.arachnoid.sshelper/files/home/SDCard/DCIM/Camera/* .

Ao encerrar a conexão SSH no computador, também é indicado desligar o servidor SSH no celular e sair do programa.

O script em python a seguir permite facilitar a execução dos processos acima ao definir variáveis a serem utilizadas em cada comando. Sua execução espera como parâmetros de entrada, respectivamente: a última parte do número de IP (definido ao começar a rodar o servidor SSH no celular, o restante do número pode ser editado diretamente no script na variável “ip”) e as opções de ação do script. As duas opções de ação envolvem baixar todos os arquivos de imagem e vídeo gravados pela câmera do celular (argumento “get_cam”) ou copiar um arquivo “.mp3” do PC para o celular (o argumento nesse caso é o caminho completo do próprio arquivo, digitado entre aspas duplas).

#!/usr/bin/env python3.7.11
# -*- Coding: UTF-8 -*-

import sys
import os

# Input arguments by command line
ip_end = sys.argv[1]
action = sys.argv[2] # type inside double quotes: path/Author - Music.mp3

# Info about connection
user = 'admin'
ip = F'192.168.1.{ip_end}'
port = '2222'
cel_path = '/data/data/com.arachnoid.sshelper/files/home/SDCard'

# If has '/' and '.mp3' at 2nd argument, is copying a music file
if '.mp3' in action:
    print('Copy music file from PC to cel...')
    file_mp3 = action.split('/')[-1]
    folder_cel = action.split('/')[-2]
    cmd = F'scp -P {port} "{file_mp3}" {user}@{ip}:{cel_path}/Music/{folder_cel}'
    print(cmd)
    os.system(cmd)
elif 'get_cam' in action:
    print('Copy images/video from camera to PC folder Downloads...')
    # Create folder at Downloads to save downloaded files
    folder_cam = '/home/vinicius/Downloads/camera'
    cmd = F'mkdir -p {folder_cam}'
    os.system(cmd)
    # Write command and execute
    cmd = F'scp -P {port} {user}@{ip}:{cel_path}/DCIM/Camera/* {folder_cam}'
    print(cmd)
    os.system(cmd)
else:
    print('Arguments: last part of IP number and action (cam or music file)')

Acessar computador a partir de celular

Para fazer acesso SSH de algum computador baseado em Linux a partir do seu celular, existe o aplicativo ConnectBot. Ele é um cliente SSH que consegue gerenciar múltiplas sessões simultâneas, criar tunelamentos seguros e copiar/colar entre diversas aplicações. Basta instalar e inserir as informações necessárias para logar e acessar as máquinas.

Compartilhe :)

Leave a Reply

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

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.