使用netcat的通信协议

时间:2014-01-15 01:26:49

标签: linux bash network-protocols 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或期望因为我无法控制服务器。

请帮忙, 感谢。

1 个答案:

答案 0 :(得分:0)

您可以将SSH与基于主机的身份验证配合使用。然后你不需要那些脚本,只需正常使用SSH和SCP,无需密码或用户密钥。

使用基于主机的身份验证,从预定义的一组计算机(此处为主机)连接的任何用户都将在目标计算机(此处为主板)上自动进行身份验证。

您需要修改主板上的SSH服务器配置,以及主机上的SSH客户端配置(无需root访问即可完成)。

这是一个tutorial,可以帮助您入门。

请注意,如果加密不是强制性的并且性能存在问题,则可以对RSH access使用相同的基于主机的身份验证方案。