Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программное обеспечение Linux и FreeBSD (http://forum.oszone.net/forumdisplay.php?f=11)
-   -   SSH в Busybox (http://forum.oszone.net/showthread.php?t=255944)

Veno0m 10-03-2013 17:00 2108026

SSH в Busybox
 
Есть роутер с Busybox 1.0, свободного места 10 метров. Возможно ли туда поставить SSH (dropbear например) без перепрошивки девайса? Желательно по Telnet.

AMDBulldozer 10-03-2013 17:34 2108051

Если есть свободное место в файловой системе, кто Вам мешает просто скопировать файл по telnet?

Veno0m 10-03-2013 17:37 2108057

Тогда второй вопрос как откомпилировать dropbear под busybox?
ps Гугл говорит что загрузить фаил по телнет невозможно.
Возможно ли смонтировать smb шару через команду mount?

AMDBulldozer 10-03-2013 17:50 2108067

Цитата:

Цитата Veno0m
как откомпилировать 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".

Veno0m 10-03-2013 18:09 2108086

Во первых не dropbox а dropbear. Во вторых опыта сборки у меня почти нет:) (вроде через файл make) В третьих я так и не понял как залить файл по telnet. Девайс кстати DSL_2640NRU.

AMDBulldozer 10-03-2013 18:12 2108092

Цитата:

Цитата Veno0m
Девайс кстати DSL_2640NRU »

Какая на нем сейчас стоит прошивка?

Veno0m 10-03-2013 18:13 2108093

1.0.10

AMDBulldozer 10-03-2013 18:22 2108096

Цитата:

Цитата Veno0m
В третьих я так и не понял как залить файл по 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.

Veno0m 10-03-2013 18:38 2108107

Запускать так?
Код:

script.sh 192.168.1.1 login pass filefullpath
Чото ключей маловато, вижу только 2

AMDBulldozer 10-03-2013 18:46 2108114

Veno0m, это потому, что я его набросал в предположении, что пароль не запрашивается. Первый аргумент, как Вы правильно поняли, это ip-адрес или URI устройство на которое осуществляется копирование, второе - имя файла.
Вам надо добавить еще ввод пароля? Тогда подскажите мне точную строку, которую должен получить expect. Что-нибудь вроде "Password:"? Учтите, если строка не будет соответствовать действительному запросу, сценарий не сможет работать.

Veno0m 10-03-2013 19:00 2108137

Код:

Login:
Password:
DSL_2640NRU#

Затем вводим 'sh' и попадаем в Busybox.

AMDBulldozer 10-03-2013 19:17 2108159

Тогда так:

#!/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 2108193

Теперь по поводу 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.

Veno0m 10-03-2013 19:49 2108204

/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 2108220

Вложений: 1
Попробуйте запустить этот файл. Он статически скомпонован. Да еще один момент: не обращайте внимание на его имя. Суффикс "pdf" я приписал только для того, чтобы он загрузился. Попробуйте скопировать его на устройство. Если получится - сделайте исполняемым (chmod 755 dropbear.pdf) и посмотрите будет ли он работать.

Veno0m 10-03-2013 20:33 2108237

Не работает :)
https://dl.dropbox.com/u/4563091/output.txt

AMDBulldozer 10-03-2013 20:52 2108249

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" тут нужна. Но проще сделать как Вы написали, чем проверять)

Veno0m 10-03-2013 21:04 2108257

Та же ссылка. Мне эта идея уже не нравится. Может как то по другому можно.

Вот что в нем есть:
Код:

. : 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 2108265

Цитата:

Цитата Veno0m
Может как то по другому можно. »

К сожалению, другие способы мне неизвестны. Но меня смущает отсутствие команды "echo" в списке. Не могли бы Вы привести полный вывод результатов выполнения сценария. Busybox можно собрать, включая или отключая в нем поддержку отдельных команд. Если данная версия собрана без поддержки команды "echo", то, боюсь, копирование файла с использованием протокола telnet становится невозможным.
Нашел "echo". Чего и следовало ожидать - я не видел еще ни одной версии busybox без этой команды.

Veno0m 10-03-2013 21:28 2108276

Википедия говорит что можно примонтировать smb шару с помощью mount. Буду пробовать через нее.

AMDBulldozer 10-03-2013 21:36 2108282

Цитата:

Цитата Veno0m
Википедия говорит что можно примонтировать smb шару с помощью mount. Буду пробовать через нее. »

Безусловно можно. Команда smbmount. Но я абсолютно уверен, что этой утилиты на маршрутизаторе нет. Кроме того, для её работы необходим portmapper, которого тоже нет. А также поддержка cifs в ядре. Можете проверить её наличие - cat /proc/filesystems. Не сомневаюсь, что её не окажется.

AMDBulldozer 10-03-2013 21:59 2108294

Veno0m, как я и опасался, это устройство имеет единственную файловую систему, причем типа squashfs. Запись в эту файловую систему так же невозможна, как в ISO9660.
К сожалению, Вам нужно перепрошивать устройство, чтобы добавить в неё хоть один файл.

dmitriy.grigoryev.5@fb 12-09-2013 06:49 2216462

Доброго времени суток. Возникла задача как у ТС, установка SSH в Busybox. Файлы на устройство закачиваю через wget. Есть раздел rw на 8Мб ramfs. Возможно ли установить скомпилированный dropbear со всеми библиотеками в такой небольшой раздел? Заранее спасибо.


Время: 23:56.

Время: 23:56.
© OSzone.net 2001-