Inserindo automaticamente a senha ssh do terminal Busybox

1

Atualmente, estou tentando reinicializar um modem via ssh usando um script bash. Por razões que eu não me sinto como explicando, eu preciso começar em um computador servidor Ubuntu, ssh em uma instalação rodando busybox 1.21.1 e, em seguida, ssh para o modem de lá e reinicie-o.

Eu preciso que o sistema busybox insira automaticamente a senha ao conectar o modem.

Para fazer isso quando sshing no sistema busybox do servidor ubuntu, eu uso sshpass no seguinte:

sshpass -p password ssh [email protected] 'ssh [email protected]'

e executando isso me leva ao prompt de senha para o modem.

Meu problema é que o sistema busybox tem apenas uma pequena quantidade de comandos disponíveis para uso e nenhum deles é sshpass ou expect , que são os dois únicos comandos que eu sei usar para interagir automaticamente com a senha ssh prompt.

As funções definidas na instalação do busybox são

[, [[, addgroup, adduser, ar, arping, ash, awk, basename, blkid, bunzip2, bzcat,
cat, catv, chattr, chgrp, chmod, chown, chroot, chrt, chvt, cksum, clear, cmp,  
cp, cpio, crond, crontab, cut, date, dc, dd, deallocvt, delgroup, deluser, devmem, 
df, diff, dirname, dmesg, dnsd, dnsdomainname, dos2unix, du, dumpkmap, echo,
egrep, eject, env, ether-wake, expr, false, fdflush, fdformat, fgrep, find, fold,
free, freeramdisk, fsck, fuser, getopt, getty, grep, gunzip, gzip, halt, hdparm,
head, hexdump, hostid, hostname, hwclock, id, ifconfig, ifdown, ifup, inetd, init, 
insmod, install, ip, ipaddr, ipcrm, ipcs, iplink, iproute, iprule, iptunnel, kill, 
killall, killall5, klogd, last, less, linux32, linux64, linuxrc, ln, loadfont, 
loadkmap, logger, login, logname, losetup, ls, lsattr, lsmod, lsof, lspci, lsusb, 
lzcat, lzma, makedevs, md5sum, mdev, mesg, microcom, mkdir, mkfifo, mknod, mkswap,
mktemp, modprobe, more, mount, mountpoint, mt, mv, nameif, netstat, nice, nohup,
nslookup, od, openvt, passwd, patch, pidof, ping, pipe_progress, pivot_root, 
poweroff, printenv, printf, ps, pwd, rdate, readlink, readprofile, realpath,
reboot, renice, reset, resize, rm, rmdir, rmmod, route, run-parts, runlevel, sed, 
seq, setarch, setconsole, setkeycodes, setlogcons, setserial, setsid, sh, sha1sum, 
sha256sum, sha3sum, sha512sum, sleep, sort, start-stop-daemon, strings, stty, su,
sulogin, swapoff, swapon, switch_root, sync, sysctl, syslogd, tail, tar, tee, 
telnet, test, tftp, time, top, touch, tr, traceroute, true, tty, udhcpc, umount, 
uname, uniq, unix2dos, unlzma, unxz, unzip, uptime, usleep, uudecode, uuencode,
vconfig, vi, vlock, watch, watchdog, wc, wget, which, who, whoami, xargs, xz, 
xzcat, yes, zcat

Alguém sabe de alguma coisa que eu possa usar para inserir automaticamente essa senha ao passar do sistema busybox para o modem?

Qualquer ajuda ou ideia seria apreciada

EDIT: a autenticação da chave ssh é inútil devido à falta de suporte do modem.

Edit2: alguém poderia pelo menos comentar e me avisar se a pergunta que estou fazendo faz muito sentido? Tentando obter uma explicação clara do meu problema, para que alguém com o real saiba como pode me ajudar. Deixe-me saber se há alguma parte da minha pergunta que seja confusa ou se houver mais detalhes que eu possa fornecer.

    
por wvu_evan12 28.09.2015 / 00:57

2 respostas

0

Você precisa usar expect (ou similar como o módulo Expect.pm do perl, ou mesmo o módulo Net::SSH do perl ... ou o módulo python pexpect se preferir o python) no seu servidor Ubuntu para:

  • conecte-se ao sistema busybox, com uma senha ou com uma chave
  • quando você receber um prompt de shell, emita o comando ssh para acessar o modem
  • quando vir a solicitação de senha, envie a senha
  • edite todos os comandos que você precisa para o modem
  • sair do modem e, em seguida, do servidor do busybox
por 28.09.2015 / 01:24
0

Se você tiver uma chave para autenticar no sistema BusyBox intermediário e precisar da senha para o sistema final, apenas chame sshpass no sistema Ubuntu original e chame ssh -t para acessar o sistema BusyBox para que haja seja um terminal para o comando ssh interno ler sua senha.

sshpass -p modempassword ssh -t [email protected] ssh [email protected]

Se você também precisar usar uma senha para o sistema BusyBox, precisará chamar sshpass duas vezes.

sshpass -p busyboxpassword sshpass -p modempassword ssh -t [email protected] ssh [email protected]

Se, por algum motivo, você tiver problemas com a configuração da conexão, poderá fazer isso em duas etapas:

  1. Abra uma conexão principal ao Sistema BusyBox. Isso requer apenas suporte no cliente, nada de especial no servidor.

    sshpass -p busyboxpassword ssh -o ControlMaster=auto -f [email protected] sleep 999999999
    
  2. Use uma conexão escrava para o sistema BusyBox para abrir uma conexão com o modem.

    sshpass -p modempassword ssh -o ControlMaster=auto -t [email protected] ssh [email protected]
    
  3. Quando terminar, feche a conexão principal com

    ssh -O exit [email protected]
    
por 28.09.2015 / 01:53