我需要创建一种方法来通信命令并将文件从主机服务器传输到开发板。
- 对板的唯一访问是通过主机服务器(有线以太网连接)
- 主机服务器和主板都运行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或expect,因为我无法控制服务器
请帮忙,谢谢
您可以将SSH与基于主机的身份验证一起使用。然后,您就不需要这些脚本,只需正常使用SSH和SCP,而不需要密码或用户密钥。
使用基于主机的身份验证,从预定义的一组机器(此处为主机)连接的任何用户都会在目标机器(此处是板)上自动进行身份验证。
您需要修改板上的SSH
服务器配置和主机上的SSH
客户端配置(无需root访问即可完成)。
这里有一个教程,应该会让你开始。
请注意,如果加密不是强制性的,并且性能有问题,则可以对RSH
访问使用相同的基于主机的身份验证方案。