![]() |
SSH в Busybox
Есть роутер с Busybox 1.0, свободного места 10 метров. Возможно ли туда поставить SSH (dropbear например) без перепрошивки девайса? Желательно по Telnet.
|
Если есть свободное место в файловой системе, кто Вам мешает просто скопировать файл по telnet?
|
Тогда второй вопрос как откомпилировать dropbear под busybox?
ps Гугл говорит что загрузить фаил по телнет невозможно. Возможно ли смонтировать smb шару через команду mount? |
Цитата:
Вам надо собрать сервер, как я полагаю, для архитектуры 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.
|
Цитата:
|
1.0.10
|
Цитата:
Эту процедуру очень легко автоматизировать при помощи простого сценария. Естественно, при этом приходится учитывать тот факт, что двоичные файлы содержат символы, которые не могут быть выведены путем указания их в качестве аргумента команды 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 |
Veno0m, это потому, что я его набросал в предположении, что пароль не запрашивается. Первый аргумент, как Вы правильно поняли, это ip-адрес или URI устройство на которое осуществляется копирование, второе - имя файла.
Вам надо добавить еще ввод пароля? Тогда подскажите мне точную строку, которую должен получить expect. Что-нибудь вроде "Password:"? Учтите, если строка не будет соответствовать действительному запросу, сценарий не сможет работать. |
Код:
Login: |
Тогда так:
#!/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$$ |
Теперь по поводу 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 |
Вложений: 1
Попробуйте запустить этот файл. Он статически скомпонован. Да еще один момент: не обращайте внимание на его имя. Суффикс "pdf" я приписал только для того, чтобы он загрузился. Попробуйте скопировать его на устройство. Если получится - сделайте исполняемым (chmod 755 dropbear.pdf) и посмотрите будет ли он работать.
|
Не работает :)
https://dl.dropbox.com/u/4563091/output.txt |
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 |
Цитата:
Нашел "echo". Чего и следовало ожидать - я не видел еще ни одной версии busybox без этой команды. |
Википедия говорит что можно примонтировать smb шару с помощью mount. Буду пробовать через нее.
|
Цитата:
|
Veno0m, как я и опасался, это устройство имеет единственную файловую систему, причем типа squashfs. Запись в эту файловую систему так же невозможна, как в ISO9660.
К сожалению, Вам нужно перепрошивать устройство, чтобы добавить в неё хоть один файл. |
Доброго времени суток. Возникла задача как у ТС, установка SSH в Busybox. Файлы на устройство закачиваю через wget. Есть раздел rw на 8Мб ramfs. Возможно ли установить скомпилированный dropbear со всеми библиотеками в такой небольшой раздел? Заранее спасибо.
|
Время: 23:56. |
Время: 23:56.
© OSzone.net 2001-