Skip to content

SSH

Вход по ключу на удаленную машину

Сделать каталог для ssh:

$ cd
$ mkdir .ssh
$ chmod 700 .ssh

Теперь можно добавить ключ в файл authorized_keys:

$ echo '<your_ssh_pub_key>' >> ~/.ssh/authorized_keys

Поправим права на authorized_keys:

$ chmod 600 authorized_keys

Конфигурация для беззаботного входа по ssh

Для начала создадим файл конфига в каталоге ~/.ssh:

$ touch ~/.ssh/config && chmod 700 ~/.ssh/config

Затем можем начать заполнять его для себя. Например:

Host dev
 Hostname 192.168.1.10
 Port 1122
 User root
 ForwardAgent yes

Host prod
 Hostname production.example.com
 User user
  • Host - это имя (алиас) хоста, которое вы будете вводить для подключения. Можно указать несколько алиасов ($ ssh dev)
  • Hostname - куда подключаться
  • Port - порт для подключения
  • User - пользователь для подключения
  • ForwardAgent - форвард ключа ssh

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

Режим эмуляции Socks proxy в SSH

Допустим, у нас есть рабочая станция в локальной сети за firewall'ом; также имеется ssh-доступ на сервер в Интернете. Кроме ssh, никакой связи с внешним миром не имеется, а очень хочется, например, подключиться к какому-нибудь jabber-серверу.

На рабочей станции запускаем простую команду:

$ ssh -D 5555 user@remotehost -f -N

, где -D 5555 - эмуляция SOCKS сервера через порт 5555 -f - работа в фоне, после аутентификации. -N- не запускать shell на удаленном хосте.

Теперь, указав в настройках XMPP-клиента (например, Pidgin'а) в качестве SOCKS5 прокси localhost:5555, получим желаемый результат: Pidgin соединяется с сервером через внешний сервер.

Туннель ssh

Дано: сервер локальной сети ourproxy.provider.ru, доступный извне.

Требуется: получить из дома доступ к ресурсам внутри локальной сети, например, к интранет-серверу 10.10.5.1:80

Решение: выполнить на домашней машине команду, пробрасывающую туннель к искомому IP-адресу через ourproxy.provider.ru:

$ ssh -f -N user@ourproxy.provider.ru -L 8080:10.10.5.1:80

Опция -f говорит ssh, что после соединения нужно уйти в background. Опция -N указывает, что никаких команд выполнять не нужно. Ключ -L означает, что соединения к localhost на порт 8080 нужно перенаправлять на 80 порт IP-адреса 10.10.5.1

Таким образом, набирая в браузере адрес http://localhost:8080, попадаем на нужный сервер.

Обратный туннель ssh

Дано: компьютер на работе, находящийся за firewall'ом и nat'ом; компьютер дома с доступом в интернет; сервер ourproxy.provider.ru с работающим sshd, доступный обоим компьютерам. Но в данном случае прямой доступ с ourproxy.provider.ru к рабочей машине отсутствует.

Требуется: получить из дома доступ к сервису sshd на рабочем компьютере.

Решение: на рабочей машине выполнить команду:

$ ssh -f -N user@ourproxy.provider.ru -R 12345:localhost:22

Опции -f и -N описаны несколькими строчками выше. Ключ -R означает, что подключения к порту 12345 на ourproxy.provider.ru будут перенаправляться на 22 порт рабочего компьютера.

После выполнения этой команды с рабочей машины можно будет попасть на эту машину с ourproxy.provider.ru, выполнив команду:

$ ssh -p 12345 user@locahost

По этому же принципу можно получить доступ к прочим ресурсам локальной сети. Вот еще один пример.

На рабочей машине:

$ ssh -f -N user@ourproxy.provider.ru -R 8080:10.10.5.1:80

На домашней машине:

$ ssh -f -N user@ourproxy.provider.ru -L localhost:8080:localhost:8080

Теперь, набрав в адресной строке браузера на домашнем компьютере http://localhost:8080, получаем доступ к интранет-серверу за семью замками двумя firewall-ами.

Ссылки