我目前正在尝试使用 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 系统只有少量可用命令,而且没有一个是sshpass
或expect
,这是我知道用来自动与 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]
如果由于某种原因您在连接设置方面遇到问题,可以分两步进行:
打开一个主连接到 BusyBox 系统。这只需要客户端支持,服务器端没什么特别的。
sshpass -p busyboxpassword ssh -o ControlMaster=auto -f [email protected] sleep 999999999
使用与 BusyBox 系统的从属连接来打开与调制解调器的连接。
sshpass -p modempassword ssh -o ControlMaster=auto -t [email protected] ssh [email protected]
完成后,使用以下命令关闭主连接:
ssh -O exit [email protected]