如何将ARM设备SSH命令历史存储至本地并支持快捷调用?
这个问题太戳痛点了——那种每次重启就清空命令历史的无持久化ARM设备,折腾几次真的让人头大。除了记事本记命令,有几个更优雅的方案,能让你像用本地shell一样用^R搜索、上下箭头翻历史:
方案1:用rlwrap给SSH套个历史记录壳(最简单,亲测好用)
这是我最推荐的方法,rlwrap是个轻量工具,专门给没有readline支持的终端程序补上命令历史、搜索、编辑功能,正好适配你的场景:
- 安装它:Linux上用包管理器(比如
sudo apt install rlwrap或sudo dnf install rlwrap),macOS直接用brew install rlwrap。 - 连接设备时,把ssh命令用rlwrap包起来:
rlwrap ssh user@your-arm-device。 - 效果拉满:你在远程输入的所有命令都会存在本地的
~/.rlwrap/ssh_history里,完全支持^R搜索历史、上下箭头切换命令,操作逻辑和本地shell一模一样。 - 进阶偷懒:给它整个别名,在
~/.bashrc或~/.zshrc里加一行:alias ssh-arm='rlwrap ssh user@your-arm-device',之后直接敲ssh-arm就能连。
方案2:手动写脚本,无额外工具依赖
如果不想装新工具,用SSH+bash环境变量就能实现双向同步:
- 先在本地建个专门存这个设备命令历史的文件:
touch ~/.ssh/arm_device_history - 打开
~/.bashrc(或~/.zshrc),加一个自定义函数:
ssh-arm() { # 本地历史文件路径 local LOCAL_HIST="$HOME/.ssh/arm_device_history" # 远程临时历史文件(设备重启会清空,不影响) local REMOTE_HIST="/tmp/remote_history" # 连接前把本地历史推到远程,刚连上去就能看到之前的命令 scp "$LOCAL_HIST" "$1:$REMOTE_HIST" 2>/dev/null || true # 启动远程bash,指定历史文件,保留readline功能 ssh -t "$1" "HISTFILE=$REMOTE_HIST; HISTCONTROL=ignorespace:ignoredups; exec bash -i" # 退出后把远程新命令拉回本地,合并保存 scp "$1:$REMOTE_HIST" "$LOCAL_HIST" 2>/dev/null || true }
- 之后连接设备直接敲:
ssh-arm user@your-arm-device。
- 原理:每次连接前同步本地历史到远程临时目录,远程bash用这个文件存历史;退出时再把新命令拉回本地,下次连接就能复用。
方案3:轻量管道记录(适合临时用)
如果只是想记录命令,不需要实时在远程翻历史,可以用管道直接把远程命令输出写到本地:
ssh -t user@your-arm-device 'HISTFILE=/dev/stdout bash -i' | tee -a ~/.ssh/arm_history
- 局限性:这个方法没法在远程会话里用上下箭头看历史,但会把所有输入的命令存在本地文件里,之后可以用
cat ~/.ssh/arm_history查看,或者把内容复制到远程执行。
内容的提问来源于stack exchange,提问作者Artalus
相关产品推荐
相关产品推荐

