如何通过Shell脚本(netcat)实现服务器向客户端传输并执行多行代码?
解决Netcat接收多行代码不执行的问题
我明白你的困境了——客户端现在只是把服务器传过来的多行代码原封不动打印出来,根本没让shell去执行它们对吧?这是因为默认情况下nc只是把接收到的数据输出到终端,没有触发执行逻辑,咱们只要把接收的内容“喂”给shell就行,下面给你具体的方案和注意事项:
核心解决方案:将Netcat输出管道到Shell
把客户端的nc命令输出直接传给bash(或者sh,看你系统默认shell),这样接收到的代码就会被自动执行了。
修改你的client.sh,把原来单纯的接收命令改成:
#!/bin/bash # 替换成你的服务器IP和端口 nc your_server_ip your_port | bash
如果需要支持交互式命令(比如需要用户输入的场景),可以加上-i参数让bash以交互式模式运行:
nc your_server_ip your_port | bash -i
服务器端示例:发送多行代码
确保服务器端的server.sh能正确发送多行脚本,比如用Here Document来组织代码,避免换行符丢失:
#!/bin/bash # 监听1234端口,发送多行执行代码 cat << 'EOF' | nc -l -p 1234 # 这里写你要执行的多行命令 echo "服务器发来的命令正在执行..." date mkdir -p client_test_folder echo "已在客户端创建文件夹client_test_folder" EOF
⚠️ 重要安全提醒
这种方式相当于让客户端无条件执行服务器发送的任何代码,风险极高!如果服务器不可信或者传输过程被劫持,恶意代码会直接在客户端运行。建议:
- 只在完全可信的内网环境中使用
- 可以给传输的代码添加哈希校验,客户端先验证哈希再执行
- 限制服务器可发送的命令范围,避免执行高危操作
内容的提问来源于stack exchange,提问作者henriquehbr
相关产品推荐
相关产品推荐

