linux - 使用netcat的通讯协议(protocol)

标签 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 key ,尤其是因为我不知道谁会使用它。
  • 我无法安装 sshpass 或 expect,因为我无法控制服务器。

请帮忙, 谢谢。

最佳答案

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

使用基于主机的身份验证,任何从一组预定义机器(这里是主机)连接的用户都会自动在目标机器(这里是板)上进行身份验证。

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

这是一个tutorial这应该让你开始。

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

关于linux - 使用netcat的通讯协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21127467/

相关文章:

python - 正确使用 os.wait()?

c - 如何使用 libnetfilter_conntrack 查询 conntrack?

java - 多线程 http 服务器从客户端浏览器获取 GET 和 POST

tcp - 是否有一种算法可以对捕获的 session 中使用的 TCP 拥塞控制算法进行指纹识别?

C++ 锁定目录的解决方案 - linux

linux - 如何判断客户端或座席是否挂断?

linux - 当使用 ssh 作为 oracle 用户连接时以 root 身份运行脚本

bash - 如何在 unix 中查找包含特定类的 jar 文件列表

linux - 如果由 bash 执行,如何使批处理脚本退出?

linux - 多节点连接管理