В зависимости от того, насколько вы хотите автоматизировать, ожидайте
- это вариант для ретрансляции данных через хост-бастион и во внутренние системы. "вводя" что-то в сеанс SSH, как это сделал бы человек, только быстрее:
#!/usr/bin/env expect
if {[llength $argv] == 0} {
puts stderr "Usage: $argv0 bastion internalhost localfile"
exit 1
}
set basthost [lindex $argv 0]
set desthost [lindex $argv 1]
set fileup [lindex $argv 2]
spawn ssh -a -e none -o ClearAllForwardings=yes -x $basthost
# TODO login foo here for bastion host, e.g. send the password
# if see that prompt
expect {
# TODO handle timeout, eof, etc.
# TODO I have no idea what your ncurses interface looks
# like, though there's doubtless something that could
# be matched and the appropriate input sent to it...
-ex "$ " {
send -- "ssh $desthost\r"
# TODO handle subsequent login to the internal host here
}
}
Затем, когда у вас есть редактор или что-то еще, открытое на целевом хосте (с помощью соответствующих операторов send
), скармливайте ему данные via:
set upfd [open $fileup]
while {[gets $upfd line] >= 0} {
send -- "$line\r"
}
А затем используйте дополнительные вызовы send
для сохранения файла, выхода и т. д. Также, обработки ошибок и т. д.
Я обнаружил, что они используют службу спуфинга, чтобы скрыть настоящие следы:
2017-01-16 18:01:59 для хоста vps863.hidehost.net не найден IP-адрес (во время SMTP-соединения от [91.200. 12.140]) 16.01.2017 18:02:02 Ошибка аутентификации dovecot_login для (пользователя) [91.200.12.140]: 535 Неверные данные аутентификации (set_id = ftpuser) 16.01.2017 18:02:38 для хоста dedic867.hidehost.net не найден IP-адрес (во время SMTP-соединения от [91.200.13.25]) 2017-01-16 18:02:40 Ошибка аутентификатора dovecot_login для (Пользователь) [ 91.200.13.25]: 535 Неверные данные аутентификации (set_id = jimmy) 2017-01-16 18:03:09 для IP-адреса 148.153.1.90
-121- не найдено имя хоста --182461- Страницы руководства, когда-то преобразованные в удобочитаемую форму, представляют собой текстовые файлы, которые вы можете сравнивать с помощью любого инструмента, который вам подходит. Вот два примера, как две функции bash
для двух инструментов: diff
и vimdiff
. Адаптируйте их к своему любимому инструменту.
С vimdiff
:
vimdiff_man() { vimdiff -R <(man --manpath="/old/path/to/man" "$1") <(man "$1"); }
С diff
бок о бок, настроенными на ширину экрана:
diff_man() (
width="${COLUMNS:-80}"
export MANWIDTH=$((width / 2 - 2))
diff -y -W"$width" <(man --manpath="/old/path/to/man" "$1") <(man "$1") | less
)
В каждой функции я различаю два псевдофайла <(...)
, каждый из которых содержит в скобках результат выполнения команды man
(это подстановка процесса bash ).
/ old / path / to / man
- это иерархия каталогов, содержащая ваши старые справочные страницы. Ожидается, что он будет иметь те же второстепенные уровни man man1
, man2
, ... как и ваш основной справочный каталог (вероятно, / usr / share / man
). Измените его под свои нужды.
Использование:
diff_man sshd_config
vimdiff_man sshd_config
Извините, ребята, я не смог устоять перед этим ... Изменение принятого ответа следующим образом:
diff -y -w -W 150 <(links -dump "http://man.he.net/?topic=grep§ion=all" |less |fold -s -w 70) <(man grep |less |fold -s -w 70)
Вы можете сравнить расположенные рядом локальные установленные страницы руководства со страницами онлайн-руководства .... Мне просто понравилось, и я подумал Поделиться этим.
Вы можете заменить man.he.net своей любимой онлайн-программой просмотра справочных страниц (например, https://manpages.debian.org ).
Это даже прекрасно работает:
diff -y -w -W 150 <(links -dump "https://www.mankier.com/?q=grep" |less |fold -s -w 70) <(man grep |less |fold -s -w 70)
PS: -w необходимо, чтобы игнорировать все пробелы и сравнивать только строки. less используется в обоих случаях для единообразного формата при чтении и сравнении.