Исследовать способ подключения к 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 :)