5

Я хочу локальный программный доступ к выводу ssh в Mac Terminal.

Сначала я попытался перенаправить вывод каждой команды в файл. Файл был идеальным, но, конечно, он был на удаленном сервере, и sftp для каждой команды выводился немного ... тяжело.

Затем я попытался открыть Applescript Terminal, но он дает доступ только к отображаемому в настоящее время тексту на вкладке (то есть, если половина результатов уже прокрутилась из поля зрения, он не возвращается - бесполезно).

Наконец, я попытался передать ssh на tee (например, ssh user @ host | tee output.txt). Это почти сработало. У меня есть вывод в локальном файле, но там смешано много нежелательных символов. Например, каждый раз, когда я нажимаю клавишу Backspace, в файле присутствует ^ H. Также есть текст типа «[0m [K» », от которого сложнее избавиться.

Как я могу получить этот вывод ssh локально?

2 ответа2

3

Используйте script для создания машинописи терминальной сессии.

Затем используйте sed для его дезинфекции.

Например;

% script mysession

% ssh user@host

[some stuff]

% exit
Script done, output file is mysession

% sed -e '
s/'`echo "\033"`'\[[[:digit:]]*\(;[[:digit:]]*\)*[[:alpha:]]//g; # ANSI Escape sequences (perhaps over-generalised)
s/[^[:print:]]//g; # Non-printable
' mysession > mysession.txt

Теперь вы сможете читать mysession.txt без escape-кодов ANSI и других непечатаемых символов.

Это можно улучшить, удалив символ перед ^ H и т.д., Но вы указали, что не хотите этого.

1

Очень простое решение для очистки вывода будет следующим:

sed 's/[\000-\037]^M/ /g' output.txt

Однако я не знаю, как вернуть это в файл. Например, учитывая файл

[~] # ls /
[1;34mbin[0m/         [1;36mhome[0m@        [1;34mlost+found[0m/  [1;36mphp.ini[0m@     [1;34msbin[0m/        [1;34msys[0m/         [1;34mvar[0m/
[1;34mdev[0m/         [1;34mlib[0m/         [1;34mmnt[0m/         [1;34mproc[0m/        [1;34mshare[0m/       [1;34mtmp[0m/
[1;34metc[0m/         [1;36mlinuxrc[0m@     [1;34mopt[0m/         [1;34mroot[0m/        [0;0mstunnel.pid[0m  [1;36musr[0m@

это приводит к следующему выводу:

[~] # ls /
bin/         home@        lost+found/  php.ini@     sbin/        sys/         var/
dev/         lib/         mnt/         proc/        share/       tmp/
etc/         linuxrc@     opt/         root/        stunnel.pid  usr@

Вы также можете войти в сеанс с помощью script . Поэтому, когда вы входите в сессию SSH, сначала введите

script output.txt

который откроет новую оболочку и запишет все ваши действия без необходимости перенаправлять вывод или что-либо еще. Когда вы закончите, просто exit из оболочки. Если сервер удаления SSH не имеет script , вы можете запустить его из OS X, но тогда выход SSH будет искажен снова.

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