Показать полную графическую версию : SSH в Busybox
Есть роутер с Busybox 1.0, свободного места 10 метров. Возможно ли туда поставить SSH (dropbear например) без перепрошивки девайса? Желательно по Telnet.
AMDBulldozer
10-03-2013, 17:34
Если есть свободное место в файловой системе, кто Вам мешает просто скопировать файл по telnet?
Тогда второй вопрос как откомпилировать dropbear под busybox?
ps Гугл говорит что загрузить фаил по телнет невозможно.
Возможно ли смонтировать smb шару через команду mount?
AMDBulldozer
10-03-2013, 17:50
как откомпилировать dropbear под busybox »
Простите великодушно, но словосочетание "откомпилировать под busybox", к сожалению, лишено смысла.
Вам надо собрать сервер, как я полагаю, для архитектуры arm. И, естественно, соответствующей версии libc (и других библиотек). Скачайте исходные тексты dropbox'а и заголовочные файлы установленных на устройстве библиотек.
Версии библиотек Вы можете посмотреть в файловой системе самого устройства. Если возникнут проблемы с поиском "dev" версий пакетов, собирайте сервер статически (правда тогда он получится намного большего размера, но явно меньше 10МБ).
Не забудьте указать ключ кросс-компиляции при сборке (обычно задается ключом "--target" при запуске ./configure).
P.S. Простите, хотел добавить. Если у Вас нет опыта сборки пакетов (я только сейчас сообразил, что возможно мой уважаемый собеседник в повседневной жизни привык пользоваться windows, а не linux), Вам будет гораздо проще скачать из сети уже собранный dropbox.
Если Вы подскажете наименование устройства для которого он нужен и добавите (вложением или под спойлером) результаты вывода "ls -l /lib", я могу попытаться найти для Вас dropbox. Ну, или сам его соберу.
Да и еще одно. Вы уверены, что файловая система доступна для записи? Там может оказаться, к примеру, squashfs или любая другая read-only ФС. Если Вас не затруднит, опубликуйте еще вывод "cat /proc/mounts".
Во первых не dropbox а dropbear. Во вторых опыта сборки у меня почти нет:) (вроде через файл make) В третьих я так и не понял как залить файл по telnet. Девайс кстати DSL_2640NRU.
AMDBulldozer
10-03-2013, 18:12
Девайс кстати DSL_2640NRU »
Какая на нем сейчас стоит прошивка?
AMDBulldozer
10-03-2013, 18:22
В третьих я так и не понял как залить файл по telnet.»
Это очень просто. любая известная мне версия busybox поддерживает команду "echo". Поэтому, чтобы скопировать, к примеру, файл hello.txt содержащий текст "Hello, world", Вам достаточно выполнить команду echo "Hello, world" > hello.txt.
Эту процедуру очень легко автоматизировать при помощи простого сценария. Естественно, при этом приходится учитывать тот факт, что двоичные файлы содержат символы, которые не могут быть выведены путем указания их в качестве аргумента команды echo.
Поэтому сценарий для копирования файла по telnet должен выглядеть примерно так:
#!/bin/bash
LENGTH=30
rm -f /tmp/tmp$$
echo '#!/usr/bin/expect' > /tmp/tmp$$
echo "spawn telnet $1" >> /tmp/tmp$$
echo 'expect "#"' >> /tmp/tmp$$
echo "send \"rm -f $2\r\"" >> /tmp/tmp$$
echo 'expect "#"' >> /tmp/tmp$$
cat $2 | od -An -b -v -w$LENGTH | sed 's/ /\\\\\\\\/g' | sed 's/^/send "echo -ne /'| sed "s/$/>>$2\\\\r\"\nexpect \"#\"/" >> /tmp/tmp$$
chmod 755 /tmp/tmp$$
/tmp/tmp$$
rm -f /tmp/tmp$$
Примечание: как Вы видите, его использование предполагает наличие на ПК с которого производится копирование команд expect и od.
Запускать так?
script.sh 192.168.1.1 login pass filefullpath
Чото ключей маловато, вижу только 2
AMDBulldozer
10-03-2013, 18:46
Veno0m, это потому, что я его набросал в предположении, что пароль не запрашивается. Первый аргумент, как Вы правильно поняли, это ip-адрес или URI устройство на которое осуществляется копирование, второе - имя файла.
Вам надо добавить еще ввод пароля? Тогда подскажите мне точную строку, которую должен получить expect. Что-нибудь вроде "Password:"? Учтите, если строка не будет соответствовать действительному запросу, сценарий не сможет работать.
Login:
Password:
DSL_2640NRU#
Затем вводим 'sh' и попадаем в Busybox.
AMDBulldozer
10-03-2013, 19:17
Тогда так:
#!/bin/bash
LENGTH=30
rm -f /tmp/tmp$$
echo '#!/usr/bin/expect' > /tmp/tmp$$
echo "spawn telnet $1" >> /tmp/tmp$$
echo 'expect "Login:"' >> /tmp/tmp$$
echo "send \"$2\r\"" >> /tmp/tmp$$
echo 'expect "Password:"' >> /tmp/tmp$$
echo "send \"$3\r\"" >> /tmp/tmp$$
echo 'expect "DSL_2640NRU#"' >> /tmp/tmp$$
echo "send sh" >> /tmp/tmp$$
echo 'expect "#"' >> /tmp/tmp$$
echo "send \"rm -f $4\r\"" >> /tmp/tmp$$
echo 'expect "#"' >> /tmp/tmp$$
cat $4 | od -An -b -v -w$LENGTH | sed 's/ /\\\\\\\\/g' | sed 's/^/send "echo -ne /'| sed "s/$/>>$2\\\\r\"\nexpect \"#\"/" >> /tmp/tmp$$
chmod 755 /tmp/tmp$$
/tmp/tmp$$
rm -f /tmp/tmp$$
AMDBulldozer
10-03-2013, 19:37
Теперь по поводу dropbear. Этому серверу нужны следующие библиотеки:
ldd dropbear
linux-vdso.so.1 => (0x00007fffae5ff000)
libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007fcd1c023000)
libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007fcd1be20000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fcd1bc08000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fcd1b87e000)
/lib64/ld-linux-x86-64.so.2 (0x00007fcd1c284000)
Естественно, сейчас у меня вариант не для Arm, а для х86_64. Но это дела не меняет. Какие из библиотек есть на устройстве? Использует ли прошивка libc или uclibc?
P.S. Если Вас не заруднит, попробуйте проверить сценарий для копирования файлов по telnet.
/lib/
ld-uClibc.so.0
libc.so.0
libcms_boardctl.so
libcms_msg.so
libcms_util.so
libcrypt.so.0
libdl.so.0
libgcc_s.so.1
libjansson.so
libjansson.so.0
libm.so.0
libnvram.so
libresident_cli.so
libresolv.so.0
libsomovd_client.so
libutil.so.0
libwebcommon.so
libwlbcmcrypto.so
libwlbcmshared.so
libwlctl.so
libwlmngr.so
libwps.so
/lib/private/
libatmctl.so
libbcmcrypto.so
libbcmssl.so
libcms_cli.so
libcms_core.so
libcms_dal.so
libcommon.so
libfcctl.so
libmcasthal.so
libmdm.so
libnanoxml.so
librcm.so
libvlanctl.so
libxdslctl.so
/lib/public/
libcms_boardctl.so
libcms_msg.so
libcms_util.so
AMDBulldozer
10-03-2013, 20:03
Попробуйте запустить этот файл. Он статически скомпонован. Да еще один момент: не обращайте внимание на его имя. Суффикс "pdf" я приписал только для того, чтобы он загрузился. Попробуйте скопировать его на устройство. Если получится - сделайте исполняемым (chmod 755 dropbear.pdf) и посмотрите будет ли он работать.
Не работает :)
https://dl.dropbox.com/u/4563091/output.txt
AMDBulldozer
10-03-2013, 20:52
Veno0m, я идиот. Но это не страшно. Сейчас всё поправим:
#!/bin/bash
LENGTH=30
rm -f /tmp/tmp$$
echo '#!/usr/bin/expect' > /tmp/tmp$$
echo "spawn telnet $1" >> /tmp/tmp$$
echo 'expect "Login:"' >> /tmp/tmp$$
echo "send \"$2\r\"" >> /tmp/tmp$$
echo 'expect "Password:"' >> /tmp/tmp$$
echo "send \"$3\r\"" >> /tmp/tmp$$
echo 'expect "DSL_2640NRU#"' >> /tmp/tmp$$
echo "\"send sh\r\"" >> /tmp/tmp$$
echo 'expect "#"' >> /tmp/tmp$$
echo "send \"rm -f $4\r\"" >> /tmp/tmp$$
echo 'expect "#"' >> /tmp/tmp$$
cat $4 | od -An -b -v -w$LENGTH | sed 's/ /\\\\\\\\/g' | sed 's/^/send "echo -ne /'| sed "s/$/>>$2\\\\r\"\nexpect \"#\"/" >> /tmp/tmp$$
chmod 755 /tmp/tmp$$
/tmp/tmp$$
rm -f /tmp/tmp$$
Я пропустил возврат каретки (кнопка <Enter>) после команды "sh".
(честно говоря, я не уверен, что сама команда "sh" тут нужна. Но проще сделать как Вы написали, чем проверять)
Та же ссылка. Мне эта идея уже не нравится. Может как то по другому можно.
Вот что в нем есть:
. : break cd continue eval exec exit export help login newgrp
read readonly set shift times trap umask wait [ busybox cat chmod
cp dmesg echo expr false flash_eraseall httpd ifconfig init insmod
kill killall klogd linuxrc ln logger logread ls mkdir mknod modprobe
mount msh ping ps reboot rm rmmod route sendarp sh sleep sysinfo
syslogd test top true tty umount vconfig
ps модем находится на другом континенте, и телнет загнулся :(
AMDBulldozer
10-03-2013, 21:13
Может как то по другому можно. »
К сожалению, другие способы мне неизвестны. Но меня смущает отсутствие команды "echo" в списке. Не могли бы Вы привести полный вывод результатов выполнения сценария. Busybox можно собрать, включая или отключая в нем поддержку отдельных команд. Если данная версия собрана без поддержки команды "echo", то, боюсь, копирование файла с использованием протокола telnet становится невозможным.
Нашел "echo". Чего и следовало ожидать - я не видел еще ни одной версии busybox без этой команды.
Википедия говорит что можно примонтировать smb шару с помощью mount. Буду пробовать через нее.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.