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.