Практически съвети, примери и SSH тунели

Практически съвети, примери и SSH тунели
Практически примери SSH, които ще повишат уменията ви на отдалечен системен администратор. Командите и съветите ще помогнат не само за използването на SSH, но и за по-добро ориентиране в мрежата.

Знанието на няколко трика ssh е полезно за всеки системен администратор, мрежови инженер или специалист по сигурността.

Практически примери за SSH

  1. SSH socks-прокси
  2. SSH тунел (пренасочване на портове)
  3. SSH тунел към трети хост
  4. Обратен SSH тунел
  5. Обратен прокси SSH
  6. Инсталиране на VPN чрез SSH
  7. Копиране на SSH ключ (ssh-copy-id)
  8. Отдалечено изпълнение на команди (неинтерактивно)
  9. Отдалечен прихват на пакети и наблюдение в Wireshark
  10. Копиране на локална папка на отдалечен сървър чрез SSH
  11. Отдалечени GUI приложения с SSH X11 пренасочване
  12. Отдалечено копиране на файлове с rsync и SSH
  13. SSH през мрежата Tor
  14. SSH към EC2 инстанция
  15. Редактиране на текстови файлове с VIM чрез ssh/scp
  16. Монтиране на отдалечен SSH като локална папка с SSHFS
  17. Мултиплексиране на SSH с ControlPath
  18. Стриминг на видео по SSH с VLC и SFTP
  19. Двуфакторна автентикация
  20. Скокове между хостове с SSH и -J
  21. Блокиране на опити за брутфорс SSH с iptables
  22. SSH Escape за промяна на пренасочването на портове

Първо основите

Разбор на SSH командния ред

В следния пример се използват обичайни параметри, които често срещате при свързване към отдалечен сървър SSH.

localhost:~$ ssh -v -p 22 -C neo@remoteserver

  • -v: изходът от отладъчната информация е особено полезен при анализ на проблеми с автентикацията. Може да се използва многократно за извеждане на допълнителна информация.
  • - p 22: порт за свързване към отдалечения SSH сървър. 22 не е задължително да се посочва, тъй като това е стойност по подразбиране, но ако протоколът е на друг порт, то той трябва да бъде посочен с параметъра -p. Портът за слушане се задава в файла sshd_config в този формат Port 2222.
  • -C: компресия за връзката. Ако имате бавна връзка или преглеждате много текст, това може да ускори комуникацията.
  • neo@: низът пред символа @ обозначава името на потребителя за автентикация на отдалечения сървър. Ако не е посочено, по подразбиране ще се използва името на потребителската сметка, в която сте влезли в момента (~$ whoami). Потребителят също може да се зададе с параметъра -l.
  • remoteserver: името на хоста, към който се свързвате ssh, това може да бъде пълното домейн име, IP адрес или всеки хост в локалния файл hosts. За свързване към хост, който поддържа и IPv4, и IPv6, можете да добавите параметър в командния ред -4 или -6 за правилно резолване.

Всички изброени по-горе параметри са незадължителни, освен remoteserver.

Използване на конфигурационен файл

Въпреки че много хора са запознати с файла sshd_config, има и клиентски конфигурационен файл за командата ssh. Стойността по подразбиране ~/.ssh/config, но може да бъде зададена като параметър за опцията -F.

Host *
     Port 2222

Host remoteserver
     HostName remoteserver.thematrix.io
     User neo
     Port 2112
     IdentityFile /home/test/.ssh/remoteserver.private_key

В предоставения по-горе примерен конфигурационен файл ssh има две записи на хост. Първата обозначава всички хостове, за тях важи параметърът конфигурация Port 2222. Втората указва, че за хоста remoteserver трябва да се използва друго потребителско име, порт, FQDN и IdentityFile.

Конфигурационният файл може да спести много време за набиране на символи, позволявайки автоматично прилагане на разширена конфигурация при свързване с определени хостове.

Копиране на файлове по SSH с помощта на SCP

SSH клиентът идва с два други много полезни инструмента за копиране на файлове по шифрованото SSH свързване. По-долу е даден пример за стандартно използване на командите scp и sftp. Обърнете внимание, че много от параметрите за ssh се прилагат и в тези команди.

localhost:~$ scp mypic.png neo@remoteserver:/media/data/mypic_2.png

В този пример файлът mypic.png е копиран на remoteserver в папка /media/data и преименуван на mypic_2.png.

Не забравяйте за разликата в параметъра на порта. На това се хващат много, които стартират scp от командния ред. Тук параметърът на порта -P, а не -p, както в ssh клиента! Ще забравите, но не се притеснявайте, всички забравят.

За тези, които са запознати с конзолния ftp, много от командите са подобни в sftp. Можете да направите push, put и ls, както душата желае.

sftp neo@remoteserver

Практически примери

В много от тези примери можете да постигнете резултати по различни методи. Както и в всичките ни уроци и примери, предпочитанието е към практическите примери, които просто вършат работата.

1. SSH socks-прокси

SSH прокси функция номер 1 по уважителна причина. Тя е по-мощна, отколкото много хора предполагат, и ви дава достъп до всяка система, до която има достъп отдалеченият сървър, използвайки практически всяко приложение. SSH клиентът може да тунелира трафика чрез SOCKS прокси с една проста команда. Важно е да се разбере, че трафикът към отдалечените системи ще идва от отдалечения сървър, както ще бъде посочено в логовете на уеб сървъра.

localhost:~$ ssh -D 8888 user@remoteserver

localhost:~$ netstat -pan | grep 8888
tcp        0      0 127.0.0.1:8888       0.0.0.0:*               LISTEN      23880/ssh

Тук стартираме SOCKS прокси на TCP порт 8888, втората команда проверява, че портът е активен в режим на прослушване. 127.0.0.1 указва, че услугата работи само на localhost. Можем да приложим малко друга команда за прослушване на всички интерфейси, включително ethernet или wifi, което ще позволи на други приложения (браузери и т.н.) в нашата мрежа да се свързват с прокси услугата чрез SSH SOCKS прокси.

localhost:~$ ssh -D 0.0.0.0:8888 user@remoteserver

Сега можем да конфигурираме браузъра да се свързва с SOCKS прокси. В Firefox изберете Настройки | Основни | Параметри мрежа. Укажете IP адреса и порта за свързване.

Практически съвети, примери и SSH тунели

Обърнете внимание на опцията в долната част на формата, за да DNS заявките от браузъра също минават през SOCKS прокси. Ако използвате прокси сървър за криптиране на уеб трафика в локалната мрежа, тогава със сигурност ще искате да изберете тази опция, за да DNS заявките се тунелират през SSH връзката.

Активиране на SOCKS прокси в Chrome

Стартирането на Chrome с определени параметри на командния ред активира SOCKS прокси, както и тунелирането на DNS заявки от браузъра. Доверявай, но проверявай. Използвайте tcpdump за да проверите, че DNS заявките вече не са видими.

localhost:~$ google-chrome --proxy-server="socks5://192.168.1.10:8888"

Използване на други приложения с прокси

Имайте предвид, че много други приложения също могат да използват SOCKS прокси. Уеб браузърът е просто най-популярният от тях. Някои приложения имат опции за конфигурация, за да активират прокси сървъра. Други се нуждаят от малко помощ с помощна програма. Например, proxychains позволява да стартирате Microsoft RDP и др. чрез SOCKS прокси.

localhost:~$ proxychains rdesktop $RemoteWindowsServer

Опцията за конфигурация на SOCKS прокси се задава в конфигурационния файл на proxychains.

Подсилване: ако използвате отдалечен работен плот от Linux на Windows? Опитайте клиента FreeRDP. Това е по-съвременна реализация от rdesktop, с много по-гладко взаимодействие.

Употреба на SSH през socks-прокси

Вие сте в кафене или хотел — и сте принудени да използвате доста ненадежден WiFi. Локално на лаптопа създаваме ssh-прокси и установяваме ssh тунел в домашната мрежа към локален Rasberry Pi. Използвайки браузър или други приложения, настроени за socks-прокси, можем да получим достъп до всякакви мрежови услуги в нашата домашна мрежа или да излезем в интернет през домашното свързване. Всичко между вашия лаптоп и домашния сървър (чрез Wi-Fi и интернет до дома) е криптирано в SSH тунела.

2. SSH тунел (пренасочване на портове)

В най-простата форма SSH тунел просто отваря порт в локалната ви система, който се свързва с друг порт на другия край на тунела.

localhost:~$ ssh  -L 9999:127.0.0.1:80 user@remoteserver

Нека разгледаме параметъра -L. Може да бъде представен като локалната страна на слушане. Така в горния пример порт 9999 слуша на страната на localhost и се пренасочва през порт 80 на remoteserver. Обърнете внимание, че 127.0.0.1 се отнася до localhost на отдалечения сървър!

Нека да направим следваща стъпка. В следващия пример портовете за слушане са свързани с други възли в локалната мрежа.

localhost:~$ ssh  -L 0.0.0.0:9999:127.0.0.1:80 user@remoteserver

В тези примери се свързваме с порт на уеб сървър, но това може да бъде прокси сървър или друга TCP услуга.

3. SSH тунел към отдалечен хост

Можем да използваме същите параметри, за да свържем тунела от отдалечения сървър към друга услуга, работеща на трета система.

localhost:~$ ssh  -L 0.0.0.0:9999:10.10.10.10:80 user@remoteserver

В този пример пренасочваме тунела от remoteserver към уеб сървър, работещ на 10.10.10.10. Трафикът от remoteserver към 10.10.10.10 вече не е в SSH тунела.Уеб сървърът на 10.10.10.10 ще счита remoteserver за източник на уеб заявки.

4. Обратен SSH тунел

Тук настройваме слушащ порт на отдалечения сървър, който ще се свързва обратно към локалния порт на нашия localhost (или друга система).

localhost:~$ ssh -v -R 0.0.0.0:1999:127.0.0.1:902 192.168.1.100 user@remoteserver

В тази SSH сесия се установява връзка от порт 1999 на remoteserver към порт 902 на нашия локален клиент.

5. Обратен прокси SSH

В този случай ние инсталираме socks-прокси на нашето ssh-свързване, но проксито слуша на отдалечената страна на сървъра. Свързванията към този отдалечен прокси сега изглеждат като трафик от нашия localhost през тунела.

localhost:~$ ssh -v -R 0.0.0.0:1999 192.168.1.100 user@remoteserver

Отстраняване на проблеми с отдалечени SSH тунели

Ако имате проблеми с функционирането на отдалечените опции SSH, проверете с помощта на netstat, към кои още интерфейси е свързан порта за слушане. Въпреки че в примерите посочихме 0.0.0.0, но ако стойността на GatewayPorts в sshd_config е зададена на не, слушателят ще бъде свързан само към localhost (127.0.0.1).

Предупреждение за сигурност

Обърнете внимание, че при отваряне на тунели и socks-прокси вътрешните мрежови ресурси могат да бъдат достъпни от ненадеждни мрежи (например, интернет!). Това може да бъде сериозна заплаха за сигурността, затова се уверете, че разбирате какво представлява слушателят и до какво има достъп.

6. Инсталиране на VPN по SSH

Общ термин сред специалистите по методи на атака (пен-тестъри и др.) е "точка на опора в мрежата". След установяване на връзка в една система, тази система става шлюз за по-нататъшен достъп до мрежата. Точка на опора, която позволява разширяване.

За такава точка на опора можем да използваме SSH прокси и proxychains, но има някои ограничения. Например, не можем да работим директно със сокетите, затова не можем да сканираме портовете вътре в мрежата чрез Nmap SYN.

Използвайки този по-напреднал вариант на VPN, свързването се свежда до нивото 3. След това можем просто да насочим трафика през тунела, използвайки стандартната мрежова маршрутизация.

Методът използва ssh, iptables, tun интерфейси и маршрутизация.

Първо трябва да зададете тези параметри в sshd_config. Тъй като правим промени в интерфейсите на отдалечената и клиентската система, ние се нуждаем от root права от двете страни.

PermitRootLogin yes
PermitTunnel yes

След това ще установим ssh връзка, използвайки параметъра, който изисква инициализация на tun устройства.

localhost:~# ssh -v -w any root@remoteserver

Сега трябва да имаме tun устройство при показването на интерфейсите (# ip a). Следващата стъпка ще добави IP адреси към тунелните интерфейси.

Клиентската страна на SSH:

localhost:~# ip addr add 10.10.10.2/32 peer 10.10.10.10 dev tun0
localhost:~# ip tun0 up

Сървърната страна на SSH:

remoteserver:~# ip addr add 10.10.10.10/32 peer 10.10.10.2 dev tun0
remoteserver:~# ip tun0 up

Сега имаме пряк маршрут към друг хост (route -n и ping 10.10.10.10).

Може да маршрутизиране всяка подсетка през хост от другата страна.

localhost:~# route add -net 10.10.10.0 netmask 255.255.255.0 dev tun0

На отдалената страна е необходимо да се активира ip_forward и iptables.

remoteserver:~# echo 1 > /proc/sys/net/ipv4/ip_forward
remoteserver:~# iptables -t nat -A POSTROUTING -s 10.10.10.2 -o enp7s0 -j MASQUERADE

Бум! VPN през SSH тунел на мрежово ниво 3. Ето, това вече е победа.

Ако възникнат проблеми, използвайте tcpdump и ping, за да установите причината. Тъй като работим на ниво 3, нашите ICMP пакети ще преминат през този тунел.

7. Копиране на SSH ключ (ssh-copy-id)

Има няколко начина, но тази команда спестява време, за да не копирате файлове ръчно. Просто копира ~/.ssh/id_rsa.pub (или ключа по подразбиране) от вашата система в ~/.ssh/authorized_keys на отдалечения сървър.

localhost:~$ ssh-copy-id user@remoteserver

8. Отдалечено изпълнение на команди (неинтерактивно)

Командата ssh може да бъде свързана с други команди за обикновен удобен интерфейс. Просто добавете командата, която искате да стартирате на отдалечения хост, като последен параметър в кавички.

localhost:~$ ssh remoteserver "cat /var/log/nginx/access.log" | grep badstuff.php

В този пример grep се извършва на локалната система след като логът е изтеглен по SSH канала. Ако файлът е голям, по-добре е да се стартира grep на отдалечената страна, просто заключвайки двете команди в двойни кавички.

Друг пример изпълнява същата функция като ssh-copy-id от пример 7.

localhost:~$ cat ~/.ssh/id_rsa.pub | ssh remoteserver 'cat >> .ssh/authorized_keys'

9. Отдалечен прихват на пакети и преглед в Wireshark

Взех един от нашите примери от tcpdump. Използвайте го за отдалечен прихват на пакети с предаване на резултата директно в локалния Wireshark GUI.

:~$ ssh root@remoteserver 'tcpdump -c 1000 -nn -w - not port 22' | wireshark -k -i -

10. Копиране на локална папка на отдалечен сървър по SSH

Красив трик, който компресира папката с помощта на bzip2 (това е параметър -j в командата tar), а след това извлича потока bzip2 на другата страна, създавайки дубликат на папката на отдалечения сървър.

localhost:~$ tar -cvj /datafolder | ssh remoteserver "tar -xj -C /datafolder"

11. Отдалечени GUI приложения с SSH X11 пренасочване

Ако на клиента и отдалечения сървър са инсталирани "икси", то можете отдалечено да изпълните графична команда, с прозорец на вашия локален работен плот. Тази функция съществува отдавна, но все още е много полезна. Стартирайте отдалечен уеб браузър или дори конзола на VMware Workstation, както правя в този пример.

localhost:~$ ssh -X remoteserver vmware

Необходима строка X11Forwarding yes в файла sshd_config.

12. Отдалённое копирование файлов с помощью rsync и SSH

rsync значительно удобнее scp, если необходимо периодическое резервное копирование каталога, большего количества файлов или очень больших файлов. Здесь присутствует функция восстановления после сбоя передачи и копирование только изменённых файлов, что экономит трафик и время.

В этом примере используется сжатие gzip (-z) и архивный режим (-a), который включает рекурсивное копирование.

:~$ rsync -az /home/testuser/data remoteserver:backup/

13. SSH через сеть Tor

Анонимная сеть Tor может туннелировать SSH-трафик с помощью команды torsocks. Следующая команда создаст ssh-прокси через Tor.

localhost:~$ torsocks ssh myuntracableuser@remoteserver

Torsocks будет использовать порт 9050 на localhost для прокси. Как всегда, при использовании Tor необходимо внимательно проверять, какой трафик туннелируется, и другие вопросы операционной безопасности (opsec). Куда направляются ваши DNS-запросы?

14. SSH к EC2-инстансу

Для подключения к EC2-инстансу необходим закрытый ключ. Скачайте его (расширение .pem) из панели управления Amazon EC2 и измените права доступа (chmod 400 my-ec2-ssh-key.pem). Храните ключ в безопасном месте или поместите его в вашу папку ~/ .ssh/.

localhost:~$ ssh -i ~/ .ssh/my-ec2-key.pem ubuntu@my-ec2-public

Параметър -i просто указывает ssh-клиенту использовать этот ключ. Файл ~/.ssh/config отлично подходит для автоматической настройки использования ключа при подключении к хосту ec2.

Host my-ec2-public
   Hostname ec2???.compute-1.amazonaws.com
   User ubuntu
   IdentityFile ~/ .ssh/my-ec2-key.pem

15. Редактирование текстовых файлов с помощью VIM через ssh/scp

Для всех поклонников vim этот совет сэкономит время. С помощью vim файлы редактируются через scp одной командой. Этот метод просто создаёт файл локально в /tmp, а затем копирует его обратно, как только мы его сохранили из vim.

localhost:~$ vim scp://user@remoteserver//etc/hosts

Примечание: формат немного отличается от привычного scp. После хоста у нас двойной //. Это ссылка на абсолютный путь. Один слэш будет означать путь относительно домашней папки users.

**warning** (netrw) cannot determine method (format: protocol://[user@]hostname[:port]/[path])

Если вы увидите эту ошибку, дважды проверьте формат команды. Обычно это указывает на синтаксическую ошибку.

16. Монтирование удалённого SSH как локальной папки с SSHFS

С помощью sshfs — клиента файловой системы ssh — можем да свържем локалната директория с отдалечено местоположение, като запазим всички взаимодействия с файлове в криптирана сесия ssh.

localhost:~$ apt install sshfs

На Ubuntu и Debian ще инсталираме пакета sshfs, а след това просто ще прикрепим отдалеченото местоположение към нашата система.

localhost:~$ sshfs user@remoteserver:/media/data ~/data/

17. Мултиплексиране на SSH с помощта на ControlPath

По подразбиране, при наличие на активно свързване с отдалечен сървър ssh второто свързване чрез ssh или scp инициира нова сесия с допълнителна аутентификация. Опцията ControlPath позволява да се използва съществуваща сесия за всички последващи свързвания. Това значително ускорява процеса: ефектът е осезаем дори в локалната мрежа, а още повече при свързване с отдалечени ресурси.

Host remoteserver
        HostName remoteserver.example.org
        ControlMaster auto
        ControlPath ~/.ssh/control/%r@%h:%p
        ControlPersist 10m

ControlPath указва сокет, който новите свързвания проверяват за активна сесия ssh. Последната опция означава, че дори след изход от конзолата, съществуващата сесия ще остане отворена 10 минути, така че през това време можете да се свържете отново чрез съществуващия сокет. За допълнителна информация вижте помощта ssh_config man.

18. Стрийминг на видео по SSH с помощта на VLC и SFTP

Дори опитни потребители ssh и vlc не винаги знаят за тази удобна опция, когато е необходимо да се гледа видео през мрежата. В настройките File | Open Network Stream програмата vlc можете да въведете местоположението като sftp://. Ако е необходима парола, ще се появи заявка.

sftp://remoteserver//media/uploads/myvideo.mkv

19. Двуфакторна аутентификация

Същата двуфакторна аутентификация, както за банковата ви сметка или Google акаунт, важи и за SSH услугата.

Разбира се, ssh първоначално предлага функция за двуфакторна аутентификация, при която се мае парола и SSH ключ. Предимството на хардуерния токен или приложението Google Authenticator е, че те обикновено са различно физическо устройство.

Вижте нашето 8-минутно ръководство за използване на Google Authenticator и SSH.

20. Прескачане на хостове с ssh и -J

Ако заради сегментация на мрежата трябва да преминете през няколко хоста ssh, за да стигнете до крайното местоназначение, ще спестите време с краткия път -J.

localhost:~$ ssh -J host1,host2,host3 user@host4.internal

Тук е важно да се разбере, че това не е аналогично на командата ssh host1, след това user@host1:~$ ssh host2 и т. д. Параметър -J хитро използва препращане, за да настрои localhost за сесия с следващия хост в веригата. Така, в горния пример нашият localhost се удостоверява на host4. Тоест, нашите ключове за localhost се използват, а сесията от localhost до host4 е напълно криптирана.

За такава възможност в ssh_config укажете опцията за конфигурация ProxyJump. Ако редовно превключвате между няколко хоста, автоматизацията чрез конфигурацията ще спести много време.

21. Блокиране на опити за брутфорс SSH с помощта на iptables

Всеки, който е управлявал услуга SSH и е преглеждал логовете, знае колко много опити за брутфорс стават всеки час през всеки ден. Бърз начин да се намали шумът в логовете е да се премести SSH на нестандартен порт. Направете промяна в файла sshd_config с помощта на параметъра за конфигурация Port##.

С помощта на iptables може също така лесно да се блокират опити за свързване към порта, след като бъде достигната определена граница. Прост начин да се направи това е да се използва OSSEC, тъй като той не само блокира SSH, но и предприема куп други мерки за откриване на опити за нахлуване на базата на името на хоста (HIDS).

22. SSH Escape за промяна на препращането на портове

И нашият последен пример ssh е предназначен за промяна на препращането на портове на летящо в рамките на съществуваща сесия. sshПредставете си такъв сценарий. Дълбоко в мрежата; може би сте прескочили през половин дузина хоста и ви трябва локален порт на работна станция, който е пренасочен към Microsoft SMB на старата система Windows 2003 (някой помни ли ms08-67?).

Натискайки enter, опитайте да въведете в конзолата ~C. Това е контролна последователност в сесията, позволяваща да внесете промени в съществуващото свързване.

localhost:~$ ~C
ssh> -h
Commands:
      -L[bind_address:]port:host:hostport    Request local forward
      -R[bind_address:]port:host:hostport    Request remote forward
      -D[bind_address:]port                  Request dynamic forward
      -KL[bind_address:]port                 Cancel local forward
      -KR[bind_address:]port                 Cancel remote forward
      -KD[bind_address:]port                 Cancel dynamic forward
ssh> -L 1445:remote-win2k3:445
Forwarding port.

Тук можете да видите, че сме пренасочили нашия локален порт 1445 към хоста Windows 2003, който намерихме във вътрешната мрежа. Сега просто стартирайте msfconsole, и може да продължите (при условие, че планирате да използвате този хост).

Завършване

Тези примери, съвети и команди ssh трябва да предоставяте отправна точка; допълнителна информация за всеки от екипите и възможностите е налична на справочните страници (man ssh, man ssh_config, винаги ме е очаровала възможността да се свързвам с системи и да изпълнявам команди от всяка точка на света. Развивайки уменията си за работа с инструменти като).

вие ще станете по-ефективни в играта, която играете. ssh 🥇 Практически съвети, примери и SSH тунели | ProHoster

Източник: habr.com

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster