
Практически примери , които ще повишат уменията ви на отдалечен системен администратор. Командите и съветите ще помогнат не само за използването на SSH, но и за по-добро ориентиране в мрежата.
Знанието на няколко трика ssh е полезно за всеки системен администратор, мрежови инженер или специалист по сигурността.
Практически примери за SSH
Първо основите
Разбор на 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 адреса и порта за свързване.

Обърнете внимание на опцията в долната част на формата, за да DNS заявките от браузъра също минават през SOCKS прокси. Ако използвате прокси сървър за криптиране на уеб трафика в локалната мрежа, тогава със сигурност ще искате да изберете тази опция, за да DNS заявките се тунелират през SSH връзката.
Активиране на SOCKS прокси в Chrome
Стартирането на Chrome с определени параметри на командния ред активира SOCKS прокси, както и тунелирането на DNS заявки от браузъра. Доверявай, но проверявай. Използвайте за да проверите, че DNS заявките вече не са видими.
localhost:~$ google-chrome --proxy-server="socks5://192.168.1.10:8888"Използване на други приложения с прокси
Имайте предвид, че много други приложения също могат да използват SOCKS прокси. Уеб браузърът е просто най-популярният от тях. Някои приложения имат опции за конфигурация, за да активират прокси сървъра. Други се нуждаят от малко помощ с помощна програма. Например, позволява да стартирате Microsoft RDP и др. чрез SOCKS прокси.
localhost:~$ proxychains rdesktop $RemoteWindowsServerОпцията за конфигурация на SOCKS прокси се задава в конфигурационния файл на proxychains.
Подсилване: ако използвате отдалечен работен плот от Linux на Windows? Опитайте клиента . Това е по-съвременна реализация от
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, но има някои ограничения. Например, не можем да работим директно със сокетите, затова не можем да сканираме портовете вътре в мрежата чрез 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. Ето, това вече е победа.
Ако възникнат проблеми, използвайте и 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
Взех един от нашите . Използвайте го за отдалечен прихват на пакети с предаване на резултата директно в локалния 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будет использовать порт 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-минутно ръководство за .
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 може също така лесно да се блокират опити за свързване към порта, след като бъде достигната определена граница. Прост начин да се направи това е да се използва , тъй като той не само блокира 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
