从 Busybox 终端自动输入 ssh 密码

从 Busybox 终端自动输入 ssh 密码

我目前正在尝试使用 bash 脚本通过 ssh 重新启动调制解调器。由于我不想解释的原因,我需要在 ubuntu 服务器计算机上启动,通过 ssh 进入运行 busybox 1.21.1 的设置,然后从那里 ssh 进入调制解调器并重新启动它。

我需要 busybox 系统在 sshing 到调制解调器时自动输入密码。

为了在从 ubuntu 服务器 sshing 进入 busybox 系统时执行此操作,我使用sshpass以下命令:

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

运行这个命令会让我看到调制解调器的密码提示。

我的问题是 busybox 系统只有少量可用命令,而且没有一个是sshpassexpect,这是我知道用来自动与 ssh 密码提示符交互的唯一两个命令。

busybox 安装中定义的功能是

[, [[, 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

有谁知道我可以使用什么来从 busybox 系统 ssh 到调制解调器时自动输入此密码?

任何帮助或想法将不胜感激

编辑:由于缺乏调制解调器的支持,ssh 密钥身份验证是不行的。

Edit2:至少有人可以发表评论并让我知道我问的问题是否有意义?努力清楚地解释我的问题,以便真正知道如何帮助我的人。如果我的问题中有任何令人困惑的部分,或者我是否可以提供更多详细信息,请告诉我。

答案1

您需要在 Ubuntu 服务器上使用expect(或类似的模块,例如 perl 的Expect.pm模块,甚至是 perl 的Net::SSH模块...或者 python模块,如果您更喜欢 python):pexpect

  • 使用密码或密钥连接到 busybox 系统
  • 当您收到 shell 提示时,发出 ssh 命令以访问调制解调器
  • 当您看到密码提示时,发送密码
  • 向调制解调器发出您需要的任何命令
  • 从调制解调器退出,然后从 busybox 服务器退出

答案2

如果你有一个密钥来验证中间BusyBox系统,并且需要最终系统的密码,只需sshpass在原始Ubuntu系统上调用,并调用ssh -t到达BusyBox系统,这样就会有一个终端供内部ssh命令读取它的密码。

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

如果您还需要使用 BusyBox 系统的密码,则需要拨打sshpass两次。

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

如果由于某种原因您在连接设置方面遇到问题,可以分两步进行:

  1. 打开一个主连接到 BusyBox 系统。这只需要客户端支持,服务器端没什么特别的。

    sshpass -p busyboxpassword ssh -o ControlMaster=auto -f [email protected] sleep 999999999
    
  2. 使用与 BusyBox 系统的从属连接来打开与调制解调器的连接。

    sshpass -p modempassword ssh -o ControlMaster=auto -t [email protected] ssh [email protected]
    
  3. 完成后,使用以下命令关闭主连接:

    ssh -O exit [email protected]
    

相关内容