可通过电脑控制的 usb 键盘输入设备 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
aru
V2EX    硬件

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

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

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

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

    不知道那位大佬有看过类似的设备呢?
    第 1 条附言    2024-08-25 20:58:30 +08:00
    我发现自己想的太复杂了。
    现在的方法是这样子实现的。

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

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

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

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



    @restkhz
    @PhaSelEza
    @Hconk

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


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

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

    如果不算采集卡的话,单件成本可以压到 8 元这样。
    aru
        26
    aru  
    OP
       2024-08-26 07:54:11 +08:00   1
    @kkocdko
    你得知道机器在哪里呀。要不出问题的时候怎么找到这台机器
    kkocdko
        27
    kkocdko  
       2024-08-26 13:45:23 +08:00 via Android
    @aru 有道理,确实是个问题
    galenzhao
        28
    galenzhao  
       2024-08-30 15:52:28 +08:00
    arduino, mega32u4
    KeysPAN
        29
    KeysPAN  
       2024-09-02 10:03:37 +08:00
    可以那个 esp32 做,得带 usb 那种,看你有没有功耗需求吧。就拿一台服务器,其他 esp32 连接上,然后你服务器下发数据的时候 esp32 将返回数据转换成你需要的键盘输入值按照你的要求延时发送,然后就可以的啦。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1026 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 18:28 PVG 02:28 LAX 11:28 JFK 14:28
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86