Особенности SSH

Secure Shell (SSH) — это криптографический сетевой протокол для надежной работы сетевых служб по незащищенной сети.

SSH был разработан как замена протоколов Telnet и Unsecured Remote Shell, а также протоколов Berkeley Rlogin, Rsh и Rexec.

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

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

6 июля 2017 года WikiLeaks подтвердили, что Центральное разведывательное управление США разработало инструменты, которые могут использоваться на компьютерах под управлением операционных систем Microsoft Windows или GNU / Linux для перехвата SSH-соединений, запущенных клиентами SSH на скомпрометированных системах.

Вход в систему

Конечно, мы используем SSH для входа в систему удаленно:
 # ssh user@hostname 
И, при необходимости, мы можем указать другой порт:
 # ssh -p 2222 user@hostname 
Иногда у нас многой ключей SSH в нашем каталоге ~ / .ssh, мы  можем обнаружить, что SSHing на серверах в результате использования пароля приводит к ошибке «слишком много попыток аутентификации».
Если нам нужно войти на сервер с паролем, мы можем попытаться принудительно ввести пароль.
Это остановит SSH от попыток использовать ваши SSH-ключи:
 # ssh -o "PubkeyAuthentication no" username@hostname 
Если вы используете AWS и  а в других случаях вы можете получить файл PEM для использования в качестве идентификатора
В этом случае вам может потребоваться указать конкретный файл идентификации, который будет использоваться при входе в систему. Мы можем сделать это с помощью флага -i:
 # ssh -i /path/to/identity.pem username@hostname 

Конфигурация SSH


Если вы хотите настроить алиасы для доступа к серверам, к которым вы часто обращаетесь, вы можете создать файл ~ / .ssh / config и указать каждый

понравившийся вам сервер вместе с методом аутентификации:

 # vim ~/.ssh/config

Host somealias
HostName example.com
Port 2222
User someuser
IdentityFile ~/.ssh/id_example
IdentitiesOnly yes

Host anotheralias
HostName 192.168.33.10
User anotheruser
PubkeyAuthentication no

How aws
HostName some.address.ec2.aws.com
User awsuser
IdentityFile ~/.ssh/aws_identity.pem
IdentitiesOnly yes 

Итак, есть несколько примеров, которые вы можете найти в файле ~ / .ssh / config (у вас может быть столько записей, сколько хотите).

Использование определенного хоста («алиас») так же просто:

 # ssh somealias 

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

  • HostNameхост сервера (домен или ipaddress)
  • PortПорт, который следует использовать при подключении.
  • Userимя пользователя для входа в систему
  • IdentityFileидентификатор ключа SSH для использования при входе в систему, если используется доступ по SSH-ключам
  • IdentitiesOnly – “Yes” чтобы указать только попытку входа в систему через SSH-ключ
  • PubkeyAuthentication – “No” если хотите обойти аутентификацию ключей SSH

SSH-туннель

SSH можно использовать для туннелирования, что является, по сути, переадресацией портов.

Есть несколько способов сделать это — локальные (исходящие), удаленные (inboud) и некоторые другие (динамические и агенты).

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

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

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

Например, MySQL по умолчанию использует только соединения localhost.

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

В любом случае есть брандмауэр, подключенный к порту 3306 MySQL.

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

Как это могло бы выглядеть?

 # ssh -L 3306:localhost:3306 username@hostname 

Давайте посмотрим следующее:

-L — Настройка локальной переадресации портов

3306 — Локальный порт для пересылки

localhost: 3306 — В пределах удаленного сервера, какой адрес и порт для пересылки трафика. Поскольку сервер MySQL находится на удаленном сервере, мы туннелируем на «localhost» удаленного сервера на порт 3306, который слушает MySQL.

username @ localhost — Имя пользователя и хост SSH для подключения

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

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

 # ssh -L 3307:localhost:3306 username@hostname 

Затем моему локальному клиенту mysql придется подключиться к порту 3307, который все равно будет туннелировать локальный 3306 удаленного сервера:

Удаленная переадресация портов

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

Для этого нам нужен удаленный сервер, на который могут связаться все стороны. Будет что-то вроде сервера AWS или Digital Ocean.

Во-первых, давайте притворимся, что наш локальный компьютер имеет веб-сервер, работающий на порту 8001:

На нашей локальной машине

 # curl localhost:8001
Hi!

 

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

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

По прежнему на локальной машине:

 # ssh -R 9000:localhost:8001 username@hostname 

Давайте рассмотрим эту команду:

-R — Использование перенаправления удаленных портов
9000 — Порт удаленного сервера  (а не наш локальный сервер на этот раз!)
localhost: 8001 — местный адрес для пересылки. Поскольку наш веб-сервер находится на локальном порту 8001, это то, что мы укажем здесь. (Да, порядок этих аргументов изменился на -R вместо -L!)
имя пользователя @ hostname — доступ SSH к удаленному серверу

Если наш IP-адрес удаленного сервера был 123.123.123.123, наши друзья могут получить доступ к нашему сайту по адресу 123.123.123.123:9000, который отправит наш локальный сайт на localhost: 8001!

Примечание. Для этого брандмауэр удаленного сервера не должен блокировать порт 9000.

Вам также может потребоваться отредактировать /etc/ssh/sshd_config и установить директиву GatewayPorts в yes. (Не забудьте перезапустить SSH после любых изменений в sshd_config).

Одноразовые команды

Вы можете запускать команды удаленно, используя SSH, — на самом деле это может быть самый простой «трюк» для использования SSH.

Когда вы запускаете команду с использованием SSH, вы выполняете команду на удаленном сервере.

Однако любой результат будет отображаться в вашем терминале.

Давайте просто запустим несколько простых команд на удаленном сервере.

Следующее действие запустит команду pwd.

Мы увидим, что он вернет папку по умолчанию, в которой мы будем находиться после входа в систему

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

 # ssh -p 2222 username@hostname pwd
/home/username 

 

cryptoparty

Cryptography is typically bypassed, not penetrated.

Особенности SSH: 1 комментарий

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

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