2014-01-15 3 views
2

Мне нужно создать способ передачи команд и передачи файлов с хост-сервера на плату разработки.Протокол связи с использованием netcat

  • Доступ только к плате осуществляется через хост-сервер (проводное Ethernet-соединение).
  • На хост-сервере и на плате работает Linux.
  • У меня есть возможность изменить среду Linux на плате.
  • У меня нет возможности изменить среду хост-сервера.
  • Я НЕ знаю, какие пользователи должны подключаться к плате.
  • Соединение между хост-сервером и платой не обязательно должно быть безопасным.

Прямо сейчас, я использую netcat для своих нужд, но столкнулся с проблемами надежности. Может ли кто-нибудь указать мне на некоторые инструменты, которые лучше подходят для моих потребностей и, возможно, более высокую производительность, пожалуйста?

Мое текущее решение:

Скрипт постоянно работает на борту:

while [ 1 ] ; do 
    # Start a netcat server, awaiting a file. 
    nc -l -p 1357 > file.bin 

    # Acknowledge receipt of file. 
    status=fail 
    while [ ${status} -ne 0 ] ; do 
     status=$(echo 0 | nc <host_ip> 2468 2>&1) 
    done 

    # Wait for a command. 
    nc -l -p 1357 -e /bin/sh 

    # Acknowledge receipt of command. 
    status=fail 
    while [ ${status} -ne 0 ] ; do 
     status=$(echo 0 | nc <host ip> 2468 2>&1) 
    done 
done 

Единственный способ пользователи имеют доступ к плате через скрипт на сервере:

# Send over a file. 
cat some_file.bin | /bin/nc -w 10 

# Wait for acknowledge. 
if [ $(nc -l 2468) -ne 0 ] ; then 
    exit # Fail 
fi 

# Send a command. 
echo "<some_command>" | nc -w 10 <board ip> 1357 

# Wait for acknowledge. 
if [ $(nc -l 2468) -ne 0 ] ; then 
    exit # Fail 
fi 

Причина, по которой я сейчас использую netcat, заключается в том, что я не знаю, как использовать SSH или SCP без пароля, если:

  • Я не могу создать ключ SSH для всех, кому нужен доступ к плате, тем более, что я не знаю, кто его будет использовать.
  • Я не могу установить sshpass или ожидать, так как у меня нет контроля над сервером.

Помогите, Спасибо.

ответ

0

Вы можете использовать SSH с аутентификацией на основе хоста. Тогда вам не понадобится этот сценарий и просто используйте SSH и SCP, как правило, без необходимости использования паролей и пользовательских ключей.

С помощью аутентификации на основе хоста любой пользователь, подключающийся из предопределенного набора компьютеров (здесь это будет хост), автоматически аутентифицируется на целевой машине (здесь плата).

Вам необходимо изменить конфигурацию сервера SSH на плате и конфигурацию клиента SSH на хосте (что вы можете сделать без необходимости доступа root).

Вот tutorial, который должен вас начать.

Обратите внимание, что если шифрование не является обязательным, а производительность не актуальна, вы можете использовать ту же схему проверки подлинности на основе хоста для RSH access.

+0

не является оператором OPs «У меня нет возможности изменять среду хост-сервера». исключить 'изменение конфигурации клиента SSH на хосте? Всем удачи. – shellter

+0

@shellter Если OP может запускать 'ssh board' на хосте, он также должен иметь возможность запускать' ssh -o HostbasedAuthentication board'. – damienfrancois

Смежные вопросы