2014-01-15 174 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客户端配置(无需root用户即可进行配置)。

这是应该让你开始一个tutorial

注意,如果加密是不是强制性的,性能问题,您可以使用相同的基于主机的认证方案RSH access

+0

没有OPs语句'我没有能力更改主机服务器环境。'排除'修改主机上的SSH客户端配置'?祝你们好运。 – shellter

+0

@shellter如果OP能够在主机上运行'ssh board',他也应该能够运行'ssh -o HostbasedAuthentication board'。 – damienfrancois