2014-01-15 2 views
2

명령을 전달하고 파일을 호스트 서버에서 개발 보드로 전송하는 방법을 만들어야합니다.netcat을 사용하는 통신 프로토콜

  • 보드에 대한 유일한 액세스는 호스트 서버를 통한 것입니다 (유선 이더넷 연결).
  • 호스트 서버와 보드 모두 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 클라이언트 구성 (루트 액세스없이 수행 할 수 있음)을 수정해야합니다.

여기는 tutorial으로 시작해야합니다.

암호화가 필수적이지 않고 성능이 문제가되는 경우 RSH access에 대해 동일한 호스트 기반 인증 방식을 사용할 수 있습니다.

+0

OP 문에 '호스트 서버 환경을 변경할 수 없습니다.' '호스트의 SSH 클라이언트 구성 수정'을 차단 하시겠습니까? 모두에게 행운을 빕니다. – shellter

+0

@shellter OP가 호스트에서'ssh board'를 실행할 수 있다면 그는'ssh -o HostbasedAuthentication board'를 실행할 수 있어야합니다. – damienfrancois

관련 문제