Запись SSH терминала в linux

453
Mohamed Ali Belhajali

Я настраиваю Bastion Host

Jump Server

Я пытаюсь автоматически записывать SSH-терминалы на сервере, использую TermRecord. Проблема начинается, когда я добавляю TermRecord -o ss.htmlк своему .bashrc:

echo "TermRecord -o ss.html" >> ~/.bashrc 

Терминал зальет "скрипт запущен", ничего не сохраняя.

4

2 ответа на вопрос

2
Kamil Maciorowski

У меня нет абсолютно никакого опыта TermRecord, мой ответ основан на разумной (я надеюсь, что так) догадаться о том, что происходит.

Это выглядит как TermRecordисточники .bashrcеще раз, или более вероятно, он работает еще один, bashкоторый подключает файл. Я предполагаю последнее . Во всяком случае, он TermRecordснова запускается, еще один bashисточник .bashrcснова и так далее.

Если это не позволяет войти в системуbash_profilebashrc, см. Вход без запуска или . Я бы попытался ssh -t username@hostname /bin/shисправить это .bashrcоттуда.

Чтобы заставить его работать так, как вы ожидали, вам нужно найти способ подавить выполнение, TermRecordесли оно уже внутри TermRecord. Лучше всего было бы, если бы программа добавила некоторую переменную в среду, чтобы вы могли ее обнаружить. Я не могу найти, устанавливает ли он какую-либо переменную.

Если это не так, вы можете сделать это самостоятельно. Вместо

TermRecord -o ss.html 

в вашем .bashrcиспользовании что-то вроде этого:

[ -z "$TR_PPID" ] && { export TR_PPID=$$; TermRecord -o ss.html; } 

Это означает: если переменная пуста, установите ее в PID оболочки и запустите TermRecord; в противном случае ничего не делать (перейти к следующей строке).

Заметки:

  • Убедитесь, что указанная переменная TR_PPIDне используется TermRecordили чем-либо еще. Я придумал это имя (из «PID TermRecord parend»), хотя может быть и столкновение.
  • Жесткий код -o ss.htmlможет вызвать проблемы, если вы входите в систему несколько раз.
  • Если TermRecordвыполняется, то остальная часть .bashrcбудет получена от внешнего bashтак поздно, как TermRecordвыходы. Внутренний bashбудет источником файла самостоятельно.
  • Чтобы избежать вложенности процессов, вы можете рассмотреть вопрос о замене внешнего bashс TermRecordвместо создания отдельного процесса; это может быть сделано с exec TermRecord -o ss.html. В этом случае вы, вероятно, хотите, чтобы вся строка была в самом начале вашей .bashrc. Теперь переменная будет означать «TermRecord PID», поэтому TR_PIDбудет лучшим именем.

Возможная (?) Альтернатива: использовать в TermRecordкачестве оболочки для входа.

  • Только если он поддерживает оболочку входа в систему (я не знаю этого); в противном случае это может вызвать проблемы (но, возможно, пользовательская обертка исправит это). Эксперименты с изменением вашей оболочки входа в систему (см. chsh) Должны проводиться без выхода из старой оболочки или даже с дополнительной «аварийной оболочкой». Если вы каким-либо образом блокируете себя и не можете войти заново, у вас все еще работает старая оболочка, и вы можете это исправить.
  • Это может потребовать редактирования /etc/shells.
  • В этом случае вы не должны начинать TermRecordс вашего .bashrc.
0
Sean Davey

Насколько я понимаю, вы хотите записать все ваши терминалы stdin / stdout, пока ssh'd на сервер?

рассмотреть возможность использования команды сценария

script <output_filename> 

а затем SSH к вашему серверу, как только вы закончите, закройте ваше SSH-соединение и

exit 

чтобы остановить запись сценария, указанный вами $ output_filename будет находиться в вашем текущем каталоге.

PS: вы можете убедиться, что ваши записи всегда имеют уникальные имена, используя следующее соглашение

script foo_$(date +"%Y-%m-%d%H%M") # full date and time included in filename 

или же

script foo_$(date +%s) # unique number calculate by seconds since the Unix epoch 

Похожие вопросы