V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
aru
V2EX  ›  硬件

可通过电脑控制的 usb 键盘输入设备

  •  
  •   aru · 97 天前 · 2087 次点击
    这是一个创建于 97 天前的主题,其中的信息可能已经有所发展或是发生改变。
    背景: 有很多服务器,使用统一的无盘启动,登录的用户名密码是一样的,需要给他们给他们其名字。平时的做法是接键盘鼠标显示器后登录执行下 hostname 命令。 但是由于机器太多,接键盘鼠标显示器特别耗费时间。

    想法: 希望有一个键盘输入设备,自动输入用户名密码登录并执行 hostname 命令。实际上,除了主机名,其他的输入是完全一致的:
    输入 root\n ,等 1 秒
    输入 密码\n ,等 1 秒
    输入 hostname 主机名\n ,等 1 秒
    输入 exit\n

    希望有一个模拟键盘的 HID 设备,一头接笔记本,另外一头服务器的 usb 口
    在笔记本快速执行上面的输入操作(只需要改下主机名)

    不知道那位大佬有看过类似的设备呢?
    第 1 条附言  ·  97 天前
    我发现自己想的太复杂了。
    现在的方法是这样子实现的。

    创建一个名叫 x 的用户,密码为 x ,禁止 ssh 登录
    在它的$HOME/bin 目录创建一个简单的脚本 n
    输入 n 数字编码 会在 $HOME/name.txt 添加一行
    内容为机器的 mac 地址和 数字编号

    直接插入键盘盲打登录后编号即可
    29 条回复    2024-09-02 10:03:37 +08:00
    lxxiil
        1
    lxxiil  
       97 天前 via iPhone
    dnf 同步器搬砖大佬就是用这个
    aru
        2
    aru  
    OP
       97 天前
    @lxxiil
    不大一样,因为每台机器的主机名都是不一样的
    restkhz
        3
    restkhz  
       97 天前
    Badusb?
    你可以淘宝上买一个人家用 Arduino 之类的做的。
    笔记本的话可能硬件上需要支持 USB OTG 才行。
    des
        4
    des  
       97 天前
    PhaSelEza
        5
    PhaSelEza  
       97 天前   ❤️ 1
    笔记本接“USB 转串口”,服务器接“串口转键盘”。

    笔记本端再写个串口控制程序,基于 pyserial 的话 ChatGPT 就能写。
    Hconk
        6
    Hconk  
       97 天前 via iPhone
    淘宝搜 usb 串口转键盘鼠标线,自己用 python 或者什么发串口命令就行了
    churchmice
        7
    churchmice  
       97 天前 via Android
    你这是在干嘛
    交互输入用 expect 脚本,了解一下,完全用不到 hack 键盘的程度
    另外,你可以去看下这所谓的无盘启动是不是可以加 hook,直接启动的时候推送个脚本过来跑一跑,哪用得着那么麻烦
    des
        8
    des  
       97 天前
    @churchmice 没看完就开始了,你打算脚本跑在哪里
    ETiV
        9
    ETiV  
       97 天前 via iPhone
    服务器,ansible 不行么…

    badusb ,flipper zero 有这个功能
    dhb233
        10
    dhb233  
       97 天前
    虽然是无盘,为啥不在启动的时候,根据 mac 地址或者其他的硬件序列号,自动设置主机名?所有服务器可以共享一个配置脚本
    ouqihang
        11
    ouqihang  
       97 天前
    esp32 带 HID 的型号。
    churchmice
        12
    churchmice  
       97 天前
    @des #8 既然是无盘启动,你肯定是有个系统的,你直接在你这个系统里面做文章就好了
    弄个 init.d 脚本或者啥的,根据 mac 地址判断下要设成什么样的 hostname ,有啥问题吗
    wangjiyang
        13
    wangjiyang  
       97 天前
    正好需要一个这样的东西来唤醒家里的台式机,WOL 太不稳定了。
    moefishtang
        14
    moefishtang  
       97 天前
    KVM?
    aru
        15
    aru  
    OP
       97 天前 via iPhone
    @dhb233
    @churchmice
    @ETiV
    我在描述里面简化了,实际上我执行的命令是除了设定主机名外还额外建立一个 mac 主机名的映射放文件里。下次重启会自动根据 mac 来设定主机名。
    用树莓派来做肯定是不行的,需要操作简单,设备也最好便宜操作方便。



    @restkhz
    @PhaSelEza
    @Hconk

    我研究下你们说的硬件和软件
    wsly47
        16
    wsly47  
       97 天前
    1 块钱一片的 ch552 应该可以满足要求,带 USB 支持 Arduino 有键盘相关的 Demo ,开发板也是个位数包邮。

    https://github.com/DeqingSun/ch55xduino/blob/ch55xduino/ch55xduino/ch55x/libraries/Generic_Examples/examples/05.USB/HidKeyboard/HidKeyboard.ino
    Earthman
        17
    Earthman  
       97 天前
    总结一下需求:一个 USB Device 设备,应该有 2 个 USB 口,一个插服务器做 HID 设备,一个插笔记本,接口未知,hid 或者串口都可以吧。插笔记本这端接受上位机命令转发到服务器那边。
    这东西应该没有现成的,涉及到 USB ,有一定开发难度。LZ 还是折腾 linux 系统做个映射程序做首次启动自行比较容易。
    aru
        18
    aru  
    OP
       97 天前
    @Earthman
    显然我创建一个 mac 和主机名字的映射表文件
    paopjian
        19
    paopjian  
       97 天前
    LTT 做个一个黑客设备的介绍,你搜搜 usbrubberducky
    Earthman
        20
    Earthman  
       97 天前
    对这个感兴趣,思考一下,后来找到了现成的芯片 CH9329 ,可以通过串口接受命令然后发出去 HID 键盘包,这个应该满足你的需求了
    leconio
        21
    leconio  
       97 天前 via iPhone
    在/etc/rc.local 中读取 mac 地址,匹配 hostname ,用 hostnamectl 设置。有点麻烦。。。
    DHCP 有一种方法可以把主机名同步给机器,op 可以查查。
    leconio
        22
    leconio  
       97 天前 via iPhone
    如果你用 pxe 的话,有自己配置文件的。找 mac 地址文件去配置。
    aru
        23
    aru  
    OP
       97 天前
    @leconio
    我的是物理机啦,而且是几百上千台机器。
    需要建立一个 mac 地址和主机名(可以快速找到服务器)的对照表
    至于搞定了对照表后,如何给机器设定名字那就不是个事(事实上早就弄完了)


    问题是解决了,不过看看硬件还是挺有意思的
    后面找几个硬件方案来研究一番
    kkocdko
        24
    kkocdko  
       97 天前
    前几天正好做过类似的东西,也发了个帖子, /t/1065751 ,可以参考一下,代码量不多。

    但是我还是觉得 hostname 随机,然后拿 mac 地址区分会比较正常,这才是大多数正规服务器托管商的做法。我觉得抄他们的方案准没错。
    kkocdko
        25
    kkocdko  
       97 天前
    https://github.com/kkocdko/kblog/tree/master/source/toys/webusbkvm#webusbkvm

    如果不算采集卡的话,单件成本可以压到 8 元这样。
    aru
        26
    aru  
    OP
       97 天前   ❤️ 1
    @kkocdko
    你得知道机器在哪里呀。要不出问题的时候怎么找到这台机器
    kkocdko
        27
    kkocdko  
       97 天前 via Android
    @aru 有道理,确实是个问题
    galenzhao
        28
    galenzhao  
       92 天前
    arduino, mega32u4
    KeysPAN
        29
    KeysPAN  
       90 天前
    可以那个 esp32 做,得带 usb 那种,看你有没有功耗需求吧。就拿一台服务器,其他 esp32 连接上,然后你服务器下发数据的时候 esp32 将返回数据转换成你需要的键盘输入值按照你的要求延时发送,然后就可以的啦。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2592 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 06:15 · PVG 14:15 · LAX 22:15 · JFK 01:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.