Friday, November 21st, 2014 04:54 pm

Ещё одна задачка в продолжение предыдущего поста..

Итак, имеется машинка, на которой начал подыхать диск. ОС пока работает, большинство программ запускается, но единственная файловая система автоматически перемонтировалась в read-only. Машинка на внешнем хостинге, физического доступа к ней нет. Туда пока ещё можно зайти по ssh, но только из корпоративной сети, с фиксированного публичного IP.

Пока диск не подох окончательно, надо срочно скопировать оттуда в корпоративную сеть кучку особо ценных файликов. Но файлики доступны только руту, а по ssh под ним, естественно, не пускают, только через su/sudo.

Подправить конфиг sshd, поменять права на файлики или создать из них читабельный для ssh-юзера архив невозможно по вышеозначенной причине.

scp c той машинки работает, но входящие соединения в корпоративную сеть строго блокируются файрволом, только исходящие можно, да и те не куда попало. Перекидывать файлики через другую внешнюю машинку низзя, нарушение политики безопасности.

Ну и как всё же скопировать оттуда файлики в корпоративную сеть?

Хинт: довольно простое решение существует.

Оригинал этой записи в личном блоге.

Friday, November 21st, 2014 05:16 pm (UTC)
ssh port forward
Friday, November 21st, 2014 05:42 pm (UTC)
ssh remote-host "sudo tar -cf - files-to-archive" > saved.tar
Friday, November 21st, 2014 05:52 pm (UTC)
Я не админ, но почему нельзя зайти на удалённую машину, сделать ssh, sudo, потом scp в офис (или вообще куда угодно)?
Friday, November 21st, 2014 05:54 pm (UTC)
Потому, что

:: scp c той машинки работает, но входящие соединения в корпоративную сеть строго
:: блокируются файрволом, только исходящие можно, да и те не куда попало. Перекидывать
:: файлики через другую внешнюю машинку низзя, нарушение политики безопасности.
Friday, November 21st, 2014 06:33 pm (UTC)
ой, ну ладно тебе придираться.
ssh -t remote-host....
Friday, November 21st, 2014 06:36 pm (UTC)
а вообще нафик не надо требовать tty для sudo.
довольно бессмысленное требование. Если парол надо спрашивать, то надо. А еси нет, то и tty не нужен.
Friday, November 21st, 2014 06:56 pm (UTC)
ssh tunnel, а поверх него netcat+tar, нет netcat можно bash скриптик сделать
Friday, November 21st, 2014 07:15 pm (UTC)
а смотря что на машине есть
можно у себя поднять netcat и прососать к себе через ssh-туннель обратный через netcat с той стороны.

можно вообще через su или sudo запустить и из stdout забрать и у себя сложить. можно построить костылей, чтобы сразу залить туда, куда можно по политике безопасности.
Friday, November 21st, 2014 08:20 pm (UTC)
Вот ведь зануда :)
Ну засунь пароль прямо в команду, и считай ее в sudo через -S (echo pass |sudo -S ...). Несекьюрно, конечно, но это в задаче не требовалось.

P.S. Ну и вариант с ssh -R никуда не делся. там через nc засовывать в туннель, а у себя через тот-же nc ловить... Но как по мне, так оно выглядит более костылем.
Friday, November 21st, 2014 08:22 pm (UTC)
Зашифруй файл на месте, передай через внешнюю машину, расшифруй в корпоративной сети.
Friday, November 21st, 2014 08:23 pm (UTC)
ну да, на локальном хосте nc -l someport > remotebackup.tar
a на удаленном - tar -cf - filelist |nc localhost someport
предварительно подняв туннель с someport на локальный someport (ssh -R someport:localhost:someport user@remotehost).
Friday, November 21st, 2014 08:24 pm (UTC)
ну, например, нет внешней машины, куда можно временно сложить 10Тб данных :)
Friday, November 21st, 2014 08:26 pm (UTC)
Передать потоком через консоль, закодировав в Base64.
Friday, November 21st, 2014 08:27 pm (UTC)
если можно передать потоком, то зачем через 3-ю машину?
Собственно, весь вопрос, как я понимаю, именно в организации потока. При том, что один конец этого потока в корпоративной среде, куда снаружи не пробиться. Все коннекты только изнутри.
Friday, November 21st, 2014 08:33 pm (UTC)
О господи, из корпоративной сети как угодно зайти по SSH на целевую машину, там загнать файл на вход base64encode и вывод консоли в корпоративной сети направить в файл. Отвлекитесь уже от файлов.

Второй вариант - зайти на ту машину через ssh -R 2222:localhost:22 и скопировать обычным scp -P 2222. Я так постоянно делаю, когда мне хочется в офис проникнуть без корпоративного VPN.
Friday, November 21st, 2014 08:39 pm (UTC)
a я что? Я тоже это все и расписываю автору
Только без нервов. :)
Saturday, November 22nd, 2014 09:57 am (UTC)
всё уже сказанное, плюс если на хосте подскока не запрещён agent forwarding -- то с ним.

Ну, и избежать read-only можно при помощи всяких tmpfs/memoryfs и loopmounts ;P
Saturday, November 22nd, 2014 10:39 pm (UTC)
Internet is a series of tubes (c) : pipe it!