Skip to content

Instantly share code, notes, and snippets.

@jugatsu
Last active September 1, 2017 19:34
Show Gist options
  • Save jugatsu/9b315fd8b902a7277571502e77770388 to your computer and use it in GitHub Desktop.
Save jugatsu/9b315fd8b902a7277571502e77770388 to your computer and use it in GitHub Desktop.

Самостоятельное задание

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

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

Вариант №1: используем SSH Port Forwarding

# строим туннель до хоста 10.156.0.3, расположенного в приватной сети
# ключ -f для запуска в фоне, ключ -N для того, чтобы можно было запуститься
# в фоне, не вводя никакой команды
ak@ak-pc:~$ ssh -f -N -L 2222:10.156.0.3:22 35.198.92.244 -i .ssh/otus-gcp

или

# используя конфиг ssh-клиента
ak@ak-pc:~$ cat .ssh/config
Host bastion-otus-gcp
  HostName 35.198.92.244
  User ak
  IdentityFile "/home/ak/.ssh/otus-gcp"
  ForwardAgent yes

ak@ak-pc:~$ ssh -f -N -L 2222:10.156.0.3:22 bastion-otus-gcp

затем

# проверяем, что туннель слушает на 2222 порту
ak@ak-pc:~$ sudo lsof -i :2222 -Pn
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
ssh     8945   ak    5u  IPv6  87976      0t0  TCP [::1]:2222 (LISTEN)
ssh     8945   ak    6u  IPv4  87977      0t0  TCP 127.0.0.1:2222 (LISTEN)

# коннектимся к хосту internalhost
ak@ak-pc:~$ ssh -i .ssh/otus-gcp 127.0.0.1 -p 2222

# мы можем использовать опции StrictHostKeyChecking и UserKnownHostsFile,
# чтобы не делать ssh-keygen -f "/home/ak/.ssh/known_hosts" -R [127.0.0.1]:2222,
# если до этого пробрасывали порт на другие хосты
ak@ak-pc:~$ ssh -i .ssh/otus-gcp 127.0.0.1 -p 2222 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null

Вариант №2: используем опцию ProxyCommand

ak@ak-pc:~$ ssh -t -i .ssh/otus-gcp -o ProxyCommand='ssh -q -W %h:%p 35.198.92.244' 10.156.0.3

или

# используя конфиг ssh-клиента
ak@ak-pc:~$ cat .ssh/config
Host internalhost-otus-gcp
  HostName 10.156.0.3
  User ak
  ProxyCommand ssh -q -W %h:%p 35.198.92.244
  IdentityFile "/home/ak/.ssh/otus-gcp"
  ForwardAgent yes
  
# подключение в одну команду
ak@ak-pc:~$ ssh internalhost-otus-gcp 
Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.10.0-32-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  Get cloud support with Ubuntu Advantage Cloud Guest:
    http://www.ubuntu.com/business/services/cloud

0 packages can be updated.
0 updates are security updates.


Last login: Fri Sep  1 19:12:16 2017 from 10.156.0.2
ak@someinternalhost:~$ 
ak@someinternalhost:~$
ak@someinternalhost:~$ ip -4 a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc pfifo_fast state UP group default qlen 1000
    inet 10.156.0.3/32 brd 10.156.0.3 scope global ens4
       valid_lft forever preferred_lft forever
ak@someinternalhost:~$ 

Вариант №3: использовать возможность ssh для построения poor-man VPN

man ssh на предмет SSH-BASED VIRTUAL PRIVATE NETWORKS :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment