Посты по тегу: SSH

SSH сквозь бастион хост

Концепция бастиона не нова и давно используется для доступа в охраняемый периметр. Но вот как получить доступ к внутренним серверам в прозрачном режиме? Тут мы это и рассмотрим.

ProxyJump

Опция командной строки

Начиная с версии SSH 7.3 есть настройка конфигурации клиента ProxyJump или -J флаг:

ssh -J <bastion-host> <remote-host>

Так же можно указать разные имена пользователей и порты:

ssh -J bastionuser@<bastion-host:port> user@<remote-host:port>

Так же, можно указать несколько бастионов:

ssh -J <bastion1>,<bastion2>,<bastion3> <remote-host>

SSH config

### The Bastion Host
Host bastion-host-nickname
  HostName bastion-hostname

### The Remote Host
Host remote-host-nickname
  HostName remote-hostname
  ProxyJump bastion-host-nickname

А дальше как обычно:

ssh remote-host-nickname

Альтернативный метод: форвардинг stdin и stdout

Если ваш ssh клиент более старый, чем 7.3, то можно использовать такой подход:

ssh -o ProxyCommand="ssh -W %h:%p bastion-host" remote-host

Собственно, это все так же можно оформить в конфиг, чтоб не запоминать:

Host remote-host
  ProxyCommand ssh bastion-host -W %h:%p

А дальше опять просто:

ssh remote-host

How To: Проксируем весь трафик через ssh

Иногда надо отправить весь трафик через удаленный сервер. VPN'а и ничего другого, кроме ssh, нет. Чтоб провернуть этот фокус одной коммандой нам понадобится только python на обоих концах "туннеля" и ssh доступ.

Устанавливаем пакетный менеджер pip:

$ sudo apt install python-pip

Устанавливаем sshuttle:

$ sudo pip install sshuttle

Запускаем туннель:

$ sshuttle -r [email protected] 0.0.0.0/0

Все. С этого момента весь траффик пойдет через сервер example.com. И да, для консольных утилит тоже.

Чтоб DNS трафик пошел туда же надо добавить опцию --dns. Учтите, что если вы используете провайдерский DNS, то он может перестать отдавать записи:

$ sshuttle --dns -r [email protected] 0.0.0.0/0

Более подробное описание смотрите в официальной документации.

Персональный SSH proxy

Если у вас есть удаленный сервер, то и прокси искать не нужно. Используйте свой сервер в качестве socks-proxy:

ssh -D 8080 user@example.com

После этого в браузере настройте socks-proxy на 127.0.0.1, порт 8080.

ESXi: Загрузка виртуальной машины через ssh

Допустим у вас есть ESXi сервер, где крутится какое-то количество виртуальных машин и есть необходимость одну из них запустить. Но вот незадача — нет под рукой Windows с клиентом ESXi. При этом есть устройство с SSH клиентом. Чтож, давайте запустим виртуалку.

Получаем список виртуальных машин:

vim-cmd vmsvc/getallvms

Читаем состояние машины:

vim-cmd vmsvc/power.getstate <vmid>

Запускаем машину:

vim-cmd vmsvc/power.on <vmid>

Ну и еще немного команд для удобства:

vim-cmd vmsvc/power.off <vmid>
vim-cmd vmsvc/power.restart <vmid>
vim-cmd vmsvc/power.reboot <vmid>
vim-cmd vmsvc/power.shutdown <vmid>

В принципе, этого набора команд вполне достаточно для экстренного управления виртуальными машинами.