1

Я хочу воспользоваться преимуществами поиска команд bash history, но работать на нескольких хостах, к которым я ssh. Однако из-за политики безопасности у меня нет домашнего каталога на большинстве пультов, поэтому там нет ~/.bash_history . export HISTFILE=/tmp/blah не работает для текущего сеанса. Даже если у меня там был файл, он должен быть синхронизирован с несколькими удаленными устройствами через какой-нибудь локальный файл.

Решение должно выглядеть примерно так:

Через .ssh/config или alias или как-то выполнить что-то вокруг каждой команды ssh, например

scp .remote-history user@remote:/tmp/history
ssh user@remote
scp user@remote:/tmp/history .remote-history.add
cat .remote-history.add >> .remote-history

если нет существующего инструмента, который делает что-то подобное.

1 ответ1

0

Этот скрипт (remote_run) должен делать то, что вы хотите. это можно сделать намного красивее, но ...

https://gist.github.com/wwalker/c2677ec6dfef31cdaecad855e3f4df60

Запустите это как:

remote_run remote_hostname

Когда вы выйдете, он перезапишет (поэтому у вас не будет двух одновременных удаленных запусков для одного хоста или последнего выигрыша, для которого сохранена история) вашего локального файла ~/.bash_history-remote_hostname

#!/bin/bash
# version 0.0.1

LOCALHISTFILE=/tmp/$USER.history.$$;
read -d '' RUN << EOF
export HISTFILE=$LOCALHISTFILE;
export HISTTIMEFORMAT='%F %T - '
bash -i;
awk '{print \"HIST \"\$0}' \$HISTFILE;
EOF
ssh $1 "cat > $LOCALHISTFILE" < ~/.bash_history-$1
ssh -t $1 "$RUN" | tee /tmp/$USER-remote-history
grep '^HIST ' /tmp/$USER-remote-history | sed -e 's/^HIST //' -e 's/^M//' > ~/.bash_history-$1

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .