Ssh как пользоваться

Содержание:

Выполнение входа через SSH с использованием ключей

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

Как работает аутентификация с помощью ключей?

Аутентификация с помощью ключей реализуется путем создания пары ключей: приватного ключа и публичного ключа.

Приватный ключ располагается на клиентском компьютере, этот ключ защищен и хранится в секрете.

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

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

Затем клиентский компьютер отправляет соответствующий ответ обратно серверу, после чего сервер будет знать, что клиент не является поддельным.

Весь этот процесс выполняется в автоматическом режиме после того, как вы настроите ключи.

Создание ключей SSH

Ключи SSH необходимо генерировать на компьютере, откуда вы хотите войти в систему. Как правило, это ваш локальный компьютер.

Введите следующую команду в командной строке:

Нажмите ENTER, чтобы принять используемые по умолчанию значения. Ваши ключи будут сгенерированы в файлах ~/.ssh/id_rsa.pub и ~/.ssh/id_rsa.

Перейдите в каталог с помощью следующей команды:

Просмотрите данные о разрешениях для файлов:

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

В то же время файл может использоваться совместно и имеет соответствующие разрешения для данной деятельности.

Как передать ваш публичный ключ на сервер

Если в настоящее время вы используете доступ к серверу с помощью пароля, вы можете скопировать ваш публичный ключ на сервер, воспользовавшись данной командой:

В результате будет создан сеанс SSH. Когда вы введете пароль, ваш публичный ключ будет скопирован в файл авторизованных ключей сервера, что позволит не использовать пароль при входе в следующий раз.

Automate with SSH keys, but manage them

SSH keys can be used to automate access to servers. They are commonly used in scripts, backup systems, configuration management tools, and by developers and sysadmins. They also provide single sign-on, allowing the user to move between his/her accounts without having to type a password every time. This works even across organizational boundaries, and is highly convenient.

However, unmanaged SSH keys can become a major risk in larger organizations.

  • ssh-keygen — Create keys

  • ssh-copy-id — Provision access on servers

  • authorized_keys — Authorized keys file format

The PrivX On-Demand Access Manager can be used as an alternative for SSH keys, eliminating the need for permanent keys and passwords on servers entirely.

Примеры

Существует большое количество методов использования утилиты. Большинство из них неизвестны современному пользователю операционной системы Линукс.

Рассмотрим подключение к серверу.

При присоединении с использованием утилиты в командной строке потребуется ввести:

Например, нам надо подключиться к компьютеру в локальной сети debian, под пользователем slon.

Все современные пользователи первоначально присоединяются к удаленной хосту (компьютеру). Только после этого они вводят требуемые команды. Утилита ssh дает возможность выполнить необходимую задачу без обязательного запуска терминала на удаленной машине.

Предположим нам надо запустить команду top на удаленном компьютере.

К примеру, требуется запустить скрипт bash на удаленном компьютере. Сам файл bash.sh находится на локальном компьютере . Для этих целей необходимо провести перенаправление ввода bash.

С использованием утилиты пользователю предоставляется возможность сохранить бекап локального диска на удаленной серверной машине. Для этих целей нужно перенаправлять вывод dd с использованием оператора перенаправления.  Далее вывод dd сохраняется в файле copiadiska.img.

Для восстановления прежнего состояния локального диска используется созданная ранее копия. Для этого в командной строке нужно ввести:

При использовании команды ssh для входа в удаленный сервер нередко требуется пароль. Это создает дополнительные неудобства, но дает возможность обезопасить вас от злоумышленников. Несмотря на защиту, пароль можно подобрать.

Наиболее надежным методом аутентификации является использование нескольких ключей RSA. Один из них хранится на ПК, а второй является публичным. Он применяется пользователем при авторизации.

Это поведение весьма просто настроить. Изначально необходимо задать ключ. Для этого потребуется ввести:

При создании ключа пользователю необходимо ответить на определённый перечень вопросов. Если вы желаете присоединиться к удаленной машине без обязательного введения пароля, в области «Passphare» нужно оставить пустое место.

Далее ключ отправляется на удаленную машину, вводится:

После этого ключ будет сохранен. Если попробовать присоединиться к серверу повторно, вы увидите, что введение пароля уже не требуется.

Стоит отметить, размещать пароли в обыденных текстовых файлах не стоит. Ими могут воспользоваться злоумышленники Но если это потребуется, такой вариант возможен. Чтобы сохранить пароль, необходимо воспользоваться оператором, используемым при перенаправлении Bash. Введите в командной строке:

При запуске команды ssh на экране монитора нередко всплывает приветствие. Допускается его изменение. За такую функцию отвечает специальный файл «/etc/issue». Вам потребуется просто открыть данный файл и указать необходимо приветствие. Для этого вводится команда:

В некоторых случаях пользователю ОС Линукс может потребоваться информация о неудачных попытках подключения к утилите. Вы можете посмотреть IP-адреса, с которых совершалось данное действие.

Все запросы о входах концентрируются в «/var/log/secure».

Чтобы отфильтровывать информацию в терминале по запросу «Failed password» необходимо добавит grep

Нередко пользователям требуется запустить определенное приложение с графической оболочкой на удаленном компьютере.

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

Стоит отметить, что все получаемые данные могут шифроваться. Чтобы такая опция заработала, потребуется включить поддержку со стороны удаленного сервера. Далее выполняется команда, позволяющая загрузить графическую программу. Для этого потребуется ввести в командную строку «ssh -XC user@remotehost «eclipse»».

Нередко при использовании нестабильного соединения с сетью возможно возникновение сбоев в работе утилиты. Если соединение случайным образом было разорвано, потребуется принудительное завершение сессии. Для активации поддержки необходимо добавить в файл:

Теперь можно завершить сессию простой командой:

В завершении можно сказать, что утилита ssh имеет существенно больший функционал, чем это кажется с первого взгляда. Пользоваться такой командой можно как при программировании, так и в повседневной работе.

Подключение к серверу через SSH

Мы уже выяснили, что представляет собой SSH и команды для него. Теперь установим соединение с сервером.

Естественно, перед началом надо арендовать виртуальный хостинг или VDS у одного из доступных провайдеров. У Timeweb, к примеру.

Если у вас macOS или Linux

  • Запускаем программу Terminal.
  • Вводим в консоль команду со следующим синтаксисом ssh имя пользователя@адрес сервера. В моем случае это ssh root@89.223.127.80.
  • Указываем пароль суперпользователя (его отправляет хостинг-провайдер сразу после регистрации).
  • Жмем Enter.

Все. Соединение установлено, можно переходить к работе непосредственно с сервером.

Если у вас Windows

  • Скачиваем и устанавливаем программу PuTTY.
  • В строку IP-адрес вводим адрес своего VDS или виртуального хостинга.
  • Жмем на кнопку Open.
  • Вводим пароль администратора, чтобы получить доступ к управлению.

Управление протоколом SSH

У команды для подключения к удаленному PC по SSH есть две важных опции:

  1. ssh -p номер порта имя пользователя@адрес сервера — заменяет стандартный 22-й порт на иной, что положительно сказывается на безопасности и устойчивости к автоматическим хакерским атакам от ботов.
  2. ssh-copy-id -i путь до файла с ключом имя пользователя@адрес сервера— копирует ключ на сервер, чтобы вход осуществлялся без логина и пароля, а именно через ключ.

Общие опции подключений

Вот несколько широко применяемых опций (чаще всего они используются в разделе Host *).

ServerAliveInterval: Этот параметр указывает SSH, когда отправлять пакет для проверки ответа от сервера. Это полезно, если ваше соединение ненадежно, и вы хотите узнать, доступен ли сервер.LogLevel: Настраивает уровень детализации, с которым SSH будет регистрироваться на стороне клиента. Это позволяет отключить регистрацию в определенных ситуациях или увеличить уровень детализации при отладке. Уровни по возрастанию детализации: QUIET, FATAL, ERROR, INFO, VERBOSE, DEBUG1, DEBUG2 и DEBUG3.StrictHostKeyChecking: Этот параметр настраивает автоматическое добавление хостов в файл ~/.ssh/known_hosts. По умолчанию для этого параметра будет задано значение «ask», что означает, что он предупредит вас, если Host Key, полученный с удаленного сервера, не соответствует найденному в файле known_hostsfile. Если вы постоянно подключаетесь к большому числу эфемерных хостов, вы можете переключить его на «no». Тогда SSH автоматически добавит в файл все хосты. Это может иметь последствия для безопасности, поэтому тщательно подумайте, прежде чем включать этот параметр.UserKnownHostsFile: Этот параметр указывает расположение, в котором SSH будет хранить информацию о том, к каким хостам он подключился. Обычно этот параметр не используется, но вы можете установить его в /dev/null, если вы отключили проверку хоста.VisualHostKey: Этот параметр позволяет SSH отображать ASCII-представление ключа удаленного хоста при подключении. Включив его, вы получите простой способ узнать ключ вашего хоста, что позволит вам легко распознать его, если вам понадобится подключиться с другого компьютера в будущем.Compression: Этот параметр полезен при создании очень медленных соединений. Он используется очень редко.
Учитывая перечисленные выше элементы, можно внести в конфигурации несколько полезных настроек.

Например, если вы очень быстро создаете и удаляете хосты у провайдера облачных вычислений, вам может пригодиться такой раздел:

Host homeVisualHostKey yesHost cloud*StrictHostKeyChecking noUserKnownHostsFile /dev/nullLogLevel QUIETHost *StrictHostKeyChecking askUserKnownHostsFile ~/.ssh/known_hostsLogLevel INFOServerAliveInterval 120

Это включит визуальный ключ хоста для домашнего подключения, что позволит вам ознакомиться с ним, чтобы вы могли узнать, меняется ли он или при подключении с другого компьютера. Также любой хост, который начинается с cloud*, не будет проверять хосты и регистрировать ошибки в логах.

Как использовать команду ssh

Следующие требования должны быть выполнены, чтобы иметь возможность войти на удаленный компьютер через SSH:

  • На удаленном компьютере должен быть запущен SSH-сервер.
  • Порт SSH должен быть открыт в брандмауэре удаленного компьютера.
  • Вы должны знать имя пользователя и пароль удаленной учетной записи. Учетная запись должна иметь соответствующие права для удаленного входа в систему.

Основной синтаксис команды следующий:

Чтобы использовать команду , откройте свой терминал или PowerShell и введите а затем имя удаленного хоста:

При первом подключении к удаленному компьютеру через SSH вы увидите сообщение, подобное приведенному ниже.

У каждого хоста есть уникальный отпечаток, который хранится в файле .

Введите чтобы сохранить удаленный отпечаток пальца, и вам будет предложено ввести пароль.

После ввода пароля вы войдете в удаленную машину.

Если имя пользователя не указано, команда использует текущее имя для входа в систему.

Чтобы войти в систему как другой пользователь, укажите имя пользователя и хост в следующем формате:

Имя пользователя также можно указать с помощью опции :

По умолчанию, когда порт не указан, клиент SSH будет пытаться подключиться к удаленному серверу через порт 22. На некоторых серверах администраторы изменяют порт SSH по умолчанию, чтобы добавить дополнительный уровень безопасности к серверу, уменьшая риск автоматические атаки.

Чтобы подключиться к порту, от порта по умолчанию, используйте параметр чтобы указать порт:

Если у вас возникли проблемы с аутентификацией или подключением, используйте параметр чтобы указать печатать отладочные сообщения:

Чтобы повысить уровень детализации, используйте или .

Команда принимает ряд параметров.

Для получения полного списка всех параметров прочтите страницу руководства по , набрав в терминале .

Пример. Скрипт. Копирование файла с удаленного компьютера.

Задача. На удаленном компьютере Anacron запускает один раз в сутки. Нужно создать скрипт который будет копировать удаленные backup-копии на локальный сервер бекапов. Скрипт запустим при помощи Использование планировщика cron в Linux.

$ ssh-keygen -t dsa
$ ls
id_dsa  id_dsa.pub
$ chmod 600 id_dsa

Поместим публичный ключ файл ~/.ssh/authorized_keys на удаленном компьютере.

$ ssh-copy-id -i id_dsa.pub USER@HOST

Скрипт:

#!/bin/bash
 
# Copy PostgreSQL
 
SFTP='/usr/bin/sftp'
DIR='/home/backups_mbill_sql/'
HOST='user@host:/home/backups_mbill_sql/'
FILES="psql-`date +%d.%m.%Y`*.sql"
 
$SFTP $HOST$FILES $DIR

SSH-туннель Layer 3 (сетевой уровень): туннелируем udp-трафик

В начале статьи было сказано о том, что ssh-туннель базируется на транспортном протоколе tcp и поэтому отправить в такой туннель udp-трафик не получится. Однако в операционных системах семейства Linux есть возможность создавать tun-интерфейсы, которые работают на сетевом уровне модели OSI и оперируют ip-пакетами.

Такой туннель, который создается с помощью учетной записи root, лучше не использовать на постоянной основе, а только в случае крайней необходимости. При этом необходимо использовать следующие методы, уменьшающие шансы раскрытия пароля root:

  • Использовать для root довольно сложный пароль на подобии хэша md5;
  • Или настроить авторизацию по ключам.

Для создания туннеля необходимо в конфигурационном файле OpenSSH разрешить туннелирование. Добавьте в файл /etc/ssh/ssh_config следующую строку:

Для того чтобы можно было использовать парольную авторизацию root:

Для подключения к ssh-серверу и создания туннеля через tun-интерфейсы используется следующая команда:

Аргумент -w создает интерфейсы tun0 на клиенте и сервере.

Затем необходимо настроить ip адреса tun интерфейсов и добавить необходимые маршруты.

На клиенте:

На сервере:

Туннели с tun-интерфейсами работают на 3 уровне модели OSI, а значит должны пропускать ICMP и UDP трафик. Поэтому проверку работоспособности туннеля можно выполнить, послав icmp-запрос на какой-либо хост из удаленной сети: ping 172.16.0.100.

Verifying Host Keys

When connecting to a server for the first time, a fingerprint of the server’s public key is presented to the user (unless the option
StrictHostKeyChecking has been disabled). Fingerprints can be determined using (1):

$ ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key

If the fingerprint is already known, it can be matched and the key can be accepted or rejected. Because of the difficulty of comparing host keys just by
looking at hex strings, there is also support to compare host keys visually, using random art. By setting the VisualHostKey option to »yes», a
small ASCII graphic gets displayed on every login to a server, no matter if the session itself is interactive or not. By learning the pattern a known server
produces, a user can easily find out that the host key has changed when a completely different pattern is displayed. Because these patterns are not unambiguous
however, a pattern that looks similar to the pattern remembered only gives a good probability that the host key is the same, not guaranteed proof.

To get a listing of the fingerprints along with their random art for all known hosts, the following command line can be used:

$ ssh-keygen -lv -f ~/.ssh/known_hosts

If the fingerprint is unknown, an alternative method of verification is available: SSH fingerprints verified by DNS. An additional resource record (RR),
SSHFP, is added to a zonefile and the connecting client is able to match the fingerprint with that of the key presented.

In this example, we are connecting a client to a server, »host.example.com». The SSHFP resource records should first be added to the zonefile for
host.example.com:

$ ssh-keygen -r host.example.com.
$ dig -t SSHFP host.example.com

Finally the client connects:

$ ssh -o "VerifyHostKeyDNS ask" host.example.com

Matching host key fingerprint found in DNS.
Are you sure you want to continue connecting (yes/no)?

VerifyHostKeyDNS

SSH-BASED VIRTUAL PRIVATE NETWORKS

ssh contains support for Virtual Private Network (VPN) tunnelling using the tun(4) network pseudo-device, allowing two networks to be joined
securely. The (5) configuration option PermitTunnel controls whether the server supports this, and at what level (layer 2 or 3 traffic).

The following example would connect client network 10.0.50.0/24 with remote network 10.0.99.0/24 using a point-to-point connection from 10.1.1.1 to
10.1.1.2, provided that the SSH server running on the gateway to the remote network, at 192.168.1.15, allows it.

On the client:

# ssh -f -w 0:1 192.168.1.15 true
# ifconfig tun0 10.1.1.1 10.1.1.2 netmask 255.255.255.252
# route add 10.0.99.0/24 10.1.1.2
# ifconfig tun1 10.1.1.2 10.1.1.1 netmask 255.255.255.252
# route add 10.0.50.0/24 10.1.1.1

/root/.ssh/authorized_keysPermitRootLogintunPermitRootLogin

tunnel="1",command="sh /etc/netstart tun1" ssh-rsa ... jane
tunnel="2",command="sh /etc/netstart tun2" ssh-rsa ... john

ipsecctlisakmpd

Server-Side Configuration

The option in the OpenSSH server configuration file must be enabled on the server to allow port forwarding. By default, forwarding is allowed. Possible values for this option are or to allow all TCP forwarding, to prevent all TCP forwarding, to allow local forwardings, and to allow remote forwardings.

Another option of interest is , which can be used to forward Unix domain sockets. It allows the same values as . The default is .

For example:

The configuration option as described above also affects remote port forwardings. Possible values were (only local connections from server host allowed; default), (anyone on the Internet can connect to remote forwarded ports), and (client can specify an IP address that can connect, anyone can if not specified).

Шаг 3: Предоставление административных привилегий

На втором шаге был создан пользователь remuserbak, но администрировать с ним сервер нельзя, ибо нет у него прав таких! Придется дать ему возможность становится рутом, как говорится с чего начали — тем и закончили.

Чтобы избежать необходимости выходить из системы обычного пользователя и снова входить в систему как учетная запись root, мы можем настроить так называемые привилегии суперпользователя или root для нашей обычной учетной записи. Это позволит нашему обычному пользователю запускать команды с административными привилегиями, помещая слово sudo перед каждой командой.

Чтобы добавить эти привилегии нашему новому пользователю, нам нужно добавить пользователя в группу sudo. По умолчанию пользователям, которые являются членами группы sudo, разрешено использовать команду sudo.

От имени пользователя root выполните команду usermod, чтобы добавить нового пользователя в группу sudo (замените имя пользователя своим новым пользователем:

root@vps:~# usermod -aG sudo remuserbak

Проверим командой id добавился ли пользователь в группу sudo

root@vps:~# id remuserbak
uid=1000(remuserbak) gid=1000(remuserbak) groups=1000(remuserbak),27(sudo)

Теперь, когда вы войдя в систему как обычный пользователь remuserbak, можете ввести sudo перед командами, чтобы выполнять действия с привилегиями суперпользователя (root).

Туннелирование SSH

Туннели SSH — мощные инструменты как для администраторов, так и для злоумышленников: так они могут незаметно проходить через корпоративный межсетевой экран.

SSH-туннелирование или перенаправление портов SSH — метод, который даёт пользователю открыть безопасный туннель между локальным и удаленным хостами. 

Перенаправление портов SSH — это метод перенаправления сетевого трафика на определенный порт/IP-адрес так, что удаленный хост становится напрямую доступным для приложений на локальном хосте. Пункт назначения может быть на удаленном сервере SSH или этот сервер может быть настроен для пересылки на еще один удаленный хост. 

Перенаправление порта

SSH-туннелирование или перенаправление портов SSH — это метод создания зашифрованного SSH-соединения между клиентом и сервером, через которое могут ретранслироваться порты служб.

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

Существует три типа переадресации портов SSH:

Перенаправление локального порта

Перенаправление локального порта позволяет вам перенаправить соединение с клиентского хоста на хост-сервер SSH, а затем на порт хоста назначения.

Чтобы создать переадресацию локального порта, передайте параметр клиенту :

Параметр -f указывает команде работать в фоновом режиме, а не выполнять удаленную команду.

Перенаправление удаленного порта

Перенаправление удаленного порта противоположно перенаправлению локального порта. Он перенаправляет порт с хоста сервера на хост клиента, а затем на порт хоста назначения.

Параметр указывает создать переадресацию удаленного порта:

Динамическая переадресация портов

Динамическая переадресация портов создает прокси-сервер SOCKS, который обеспечивает связь через диапазон портов.

Чтобы создать динамическую переадресацию портов (SOCKS), передайте параметр клиенту ssh:

Более подробную информацию и пошаговую инструкцию смотрите в статье Как настроить SSH-туннелирование (перенаправление портов) .

Opening Backdoors into the Enterprise

Remote SSH port forwarding is commonly used by employees to open backdoors into the enterprise. For example, the employee may set get a free-tier server from Amazon AWS, and log in from the office to that server, specifying remote forwarding from a port on the server to some server or application on the internal enterprise network. Multiple remote forwards may be specified to open access to more than one application.

The employee would also set on the server (most employees do not have fixed IP addresses at home, so they cannot restrict the IP address).

For example, the following command opens access to an internal Postgres database at port 5432 and an internal SSH port at port 2222.

Прочее

Это бонус для развлечения. Шутка от разработчиков Linux, не несущая пользы.

cowsay — заставляет цифровую корову повторить текст, который вы ей передали. Как echo, только от лица коровы.

fortune | cowsay — награждает корову философским интеллектом и дает ей возможность делиться с вами умными цитатами.

cowsay -l — демонстрирует всех животных, которые могут с вами пообщаться в том случае, если вам почему-то не приглянулась корова.

sudo название менеджера пакетов install fortunes fortune-mod fortunes-min fortunes-ru — учит животных говорить на русском.

Здесь, пожалуй, и остановимся. Ключевые SSH-команды сервера мы рассмотрели. Их хватит для навигации и выполнения базовых операций. Остальное уже на ваших плечах и полностью зависит от проекта, над которым вы работаете.

Локальное перенаправление портов (SSH port forwarding): получаем доступ по SSH к удалённым ресурсам на локальной системе

«Локальное перенаправление портов» позволяет осуществлять доступ к ресурсам, находящимся внутри локальной сети. Предположим, что нужно попасть на офисный сервер БД, сидя дома. В целях безопасности этот сервер настроен так, чтобы принимать подключения только с ПК, находящихся в локальной сети офиса. Но если у вас есть доступ к SSH-серверу, находящемуся в офисе, и этот SSH-сервер разрешает подключения из-за пределов офисной сети, то к нему можно подключиться из дома. Затем осуществить доступ к БД. Проще защитить от атак один SSH-сервер, чем защищать каждый ресурс локальной сети по отдельности.

Чтобы сделать это, вы устанавливаете SSH-соединение с SSH-сервером и говорите клиенту передать трафик с указанного порта на локальном ПК. Например, с порта 1234 на адрес сервера базы данных и его порт внутри офисной сети. Когда вы пытаетесь получить доступ к БД через порт 1234 на вашем ПК («localhost») трафик автоматически «туннелируется» по SSH-соединению и отправляется на сервер БД.

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

Чтобы использовать локальное перенаправление, подключитесь к SSH-серверу с использованием вспомогательного аргумента -L. Синтаксис для туннелирования трафика будет следующим:

ssh -L local_port:remote_address:remote_port username@server.com

Предположим, что офисный сервер находится по адресу 192.168.1.111. У вас есть доступ к SSH-серверу через адрес ssh.youroffice.com, и имя вашего аккаунта на SSH-сервере — bob. В таком случае необходимая команда будет выглядеть следующим образом:

ssh -L 8888:192.168.1.111:1234 bob@ssh.youroffice.com

Запустив эту команду, вы попадете на офисный сервер баз данных через порт 8888 на localhost. Если у СУБД есть веб-интерфейс, можно вписать в адресную строку браузера http://localhost:8888. Если у вас инструмент командной строки, которому необходим сетевой адрес базы данных, то направьте его на localhost:8888. Весь трафик, отправленный на порт 8888 на ПК, будет перенаправлен на 192.168.1.111:1234 внутри офисной сети:

Это слегка сбивает с толку, если надо подключиться к серверному приложению, запущенному в той же системе, где и сам SSH-сервер. К примеру, есть SSH-сервер, работающий на порте 22 на офисном ПК. Но у вас также есть сервер баз данных, работающий на порте 1234 в той же системе по тому же адресу. Вам нужно подключиться к БД из дома, но система принимает только подключение через SSH (через 22 порт), и сетевой экран не пропускает любые внешние подключения. В таком случае можно запустить следующую команду:

ssh -L 8888:localhost:1234 bob@ssh.youroffice.com

При попытке подключиться к БД через 8888 порт на вашем ПК, трафик будет передаваться с помощью SSH-подключения. Когда он достигнет системы, в которой работает SSH, SSH-сервер отправит его на порт 1234 на «localhost», принадлежащий тому же ПК, на котором запущен SSH-сервер. То есть, «localhost» в приведённой выше команде означает «localhost» с перспективы удалённого сервера:

Чтобы сделать это в PuTTY на Windows, выберите опцию Connection > SSH > Tunnels. Далее опцию «Local». В поле «Source Port» укажите локальный порт. В поле «Destination» введите целевой адрес и порт в формате удалённый_адрес:удалённый_порт.

Например, если нужно настроить SSH-тоннель, как это сделано выше, то введите 8888 в качестве порта-источника и localhost:1234 в качестве целевого адреса. После этого нажмите «Add» и затем «Open», чтобы открыть SSH-подключение. До подключения SSH туннелирования нужно ввести адрес и порт самого SSH-сервера в разделе «Session»:

1.2: Example-2: Setup Local Port Forwarding with three servers

In this example we will have three servers. Here does not has direct access to so it will use → to connect to the webserver on .

We will forward the port request from to using secure SSH Tunnel which will further connect to fetch the request.

1.2.1: Create SSH Tunnel

Create Local Forwarding port on your localhost () using SSH client. You can also ignore mentioning localhost in this command as that is the default behaviour, I have written here just for the sake of explanation

# ssh -f -N -L localhost:5555:server3:80 root@server2

Make sure the SSH process is active which means our tunnel is created

# ps -ef | grep ssh
root      1170     1  0 10:20 ?        00:00:00 /usr/sbin/sshd -D
root      1426  1170  0 10:21 ?        00:00:01 sshd: root@pts/1
root      2242  1170  0 12:31 ?        00:00:00 sshd: root@pts/0
root      2380     1  0 12:51 ?        00:00:00 ssh -f -N -L localhost:5555:server3:80 root@server2
root      2382  1430  0 12:51 pts/1    00:00:00 grep --color=auto ssh

1.2.2: Verify the SSH Tunnel

We will use to connect to our webserver on from using . So the curl tool was successfully able to fetch the webserver’s index page.

# curl  http://localhost:5555
My test site

You can check the tcpdump capture on This shows the secure tunnel communication between and and further will connect to to connect to the webserver.

# tcpdump -i enp0s8 port 22 or 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp0s8, link-type EN10MB (Ethernet), capture size 262144 bytes
12:59:04.138042 IP server1.60638 > server2.ssh: Flags , seq 2758738467:2758738551, ack 379740010, win 289, options , length 84
12:59:04.138269 IP server2.ssh > server1.60638: Flags , ack 84, win 273, options , length 0
12:59:04.144056 IP server2.53650 > server3.http: Flags , seq 2208701817, win 29200, options , length 0
12:59:04.144073 IP server3.http > server2.53650: Flags , seq 2805768777, ack 2208701818, win 28960, options , length 0
12:59:04.148666 IP server2.53650 > server3.http: Flags , ack 1, win 229, options , length 0
12:59:04.148672 IP server2.ssh > server1.60638: Flags , seq 1:45, ack 84, win 273, options , length 44
12:59:04.148790 IP server1.60638 > server2.ssh: Flags , ack 45, win 289, options , length 0
12:59:04.148917 IP server1.60638 > server2.ssh: Flags , seq 84:200, ack 45, win 289, options , length 116
12:59:04.149100 IP server2.53650 > server3.http: Flags , seq 1:79, ack 1, win 229, options , length 78: HTTP: GET / HTTP/1.1
12:59:04.149118 IP server3.http > server2.53650: Flags , ack 79, win 227, options , length 0
12:59:04.149546 IP server3.http > server2.53650: Flags , seq 1:254, ack 79, win 227, options , length 253: HTTP: HTTP/1.1 200 OK

1.2.3: Close Local forwarding Tunnel

To close the secure SSH Tunnel, go ahead and kill the respective SSH process which we created earlier:

# kill -9  2380

Как подключиться по SSH

Нам понадобится IP-адрес удаленного компьютера или сервера, к которому мы хотим подключиться. Последующие действия мы будем рассматривать на примере VDS от Timeweb – все шаги аналогичны любому хостингу, поэтому у вас не должно возникнуть никаких вопросов. Если же подключаетесь не к серверу, а к компьютеру, то можете сразу переходить ко второму пункту.

Подключаемся по SSH:

  1. Первым делом узнаем, какой используется адрес у VDS – для этого переходим в личный кабинет хостинга и заходим в список подключенных серверов. На Timeweb адрес можно узнать в специально отведенном для этого столбце.
  2. Переходим к PuTTY – запускаем программу и открываем раздел «Session». Там вводим адрес удаленного компьютера, указываем порт 22 и в нижней части приложения кликаем по кнопке «Open».
  3. При успешном вводе данных перед нами отобразится консольное окно, в котором нужно ввести логин и пароль для подключения к серверу. Как правило, логин – root, а пароль отправляется хостингом в почтовом письме после установки ОС.
  4. Если логин и пароль были введены корректно, то мы увидим окно приветствия.

Таким образом мы подключились к ПК на операционной системе Linux. Здесь мы можем вводить команды и удаленно взаимодействовать с компьютером.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector