You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

实现sudo认证时Socket传输遇TypeError错误求助

问题解答

错误原因

Python 的 socket.sendto() 方法只接受字节类对象,但你通过 input() 获取的密码 passwd 是字符串(str)类型,直接发送就会触发 TypeError: a bytes-like object is required, not 'str' 错误。你之前发送 b'sht' 是对的,因为 b'' 前缀把字符串转换成了字节类型,但密码部分没做这个转换。

修复代码

把输入的密码字符串编码成字节类型即可,用 encode() 方法,示例:

if decision == "1":
    mySocket.sendto(b'sht',(SERVER_IP,PORT_NUMBER))
    passwd = input("""
    
    the choice requires sudo, please enter the password for sudo:

    """)

    # 把字符串转成字节后发送
    mySocket.sendto(passwd.encode('utf-8') ,(SERVER_IP,PORT_NUMBER))

服务器端接收后,需要用 decode('utf-8') 把字节转回字符串再处理。

安全性优化建议

你提到服务器本地存密码不安全,确实存在风险,给几个替代方案:

  • 不要明文传密码:用 hashlib 对密码生成哈希值(比如SHA-256)再发送,服务器端对比哈希值而非明文
  • 加密通信链路:用TLS加密整个socket通信,防止数据被截获
  • 换用更安全的认证方式:比如一次性令牌(OTP)、基于公钥的认证,比静态密码更可靠

内容的提问来源于stack exchange,提问作者grubo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 10:34:58