# SSH подключение через промежуточный узел без доступа к промежуточному узлу Задача: обеспечить подключение к узлу в закрытом сегменте сети через промежуточный (bastion) узел. При этом закрыть возможность подключения к промежуточному узлу. Упрощённая схема представлена на русунке ![stand](./images/ssh01.png) ## Вводные данные - `srchost` - узел с которого необходимо обеспечить подключение - `jumpuser` - пользователь, который инициирует подключение - `bastion` - промежуточный узел, через который необходимо обеспечить подключение - `enduser` - пользователь, от имени которого необходимо выполнить подключение - `dsthost` - узел, к которому необходимо подключиться Порядок подключения: ```shell jumpuser@srchost:~$ ssh -A -J jumpuser@bastion enduser@dsthost ``` ## Настройка подключения ### Сегенерировать ssh ключ На узле `srchost` для пользователя `jumpuser` сгенерировать ssh-ключ ```shell jumpuser@srchost:~$ ssh-keygen ``` ### Скопировать публичный ключ на узел `bastion` ```shell jumpuser@srchost:~$ ssh-copy-id jumpuser@bastion ``` ### Проверить подключение Убедиться, что есть возможность подключения без пароля ```shell jumpuser@srchost:~$ ssh jumpuser@bastion jumpuser@bastion:~$ ``` ### Скопировать публичный ключ на узел `dsthost` Скопировать публичный ключ `jumpuser` в файл `/home/enduser/.ssh/authorized_keys` на узле `dsthost` ```shell enduser@dsthost:~$ cat .ssh/authorized_keys ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDqAk2CZKveP6zvYKBlwxhlhontNHOpMiKdS1rIfJ8r5J9CHn3EbZftfwMIPp2dji4YsKkCHVEVHbwLf+efc/8wUxnaBdVZPaP/SUT9+f3NjjVxS7vPfIw24qHTltIIcJaeJMPHZ5BKtF9Gvgkh4N4MLH2e2o7OcekQej/JEQSDneqgEfPe5Xhks34VOOkhaM02skyFjCEacLBfBbYHqlwWDEEtUAMzQGdgt9h85WWcCBA/qRT8eRDvKFYEr7238jREKD0MPQ1R5jIjk37GFa0vr7vEAO9mTI4hGHl89YqnxaWg6P5gO+lXGsemE+0oXpWG7zKt8PF2nPK6dq93RFeb jumpuser@srchost ``` ### Проверить подключение через промежуточный хост с пробросом ключа ```shell jumpuser@srchost ~$ ssh -A -J jumpuser@srchost enduser@dsthost enduser@dsthost ~$ ``` ### Ограничить возможность подключения пользователем `jumpuser` к `bastion` В конфигурационный файл `/etc/ssh/sshd_config` добавить ```shell jumpuser@bastion:~ $ tail -n 7 /etc/ssh/sshd_config Match User jumpuser PermitTTY no X11Forwarding no PermitTunnel no GatewayPorts no ForceCommand /usr/sbin/nologin ``` После внесения изменений, необходимо перезапустить службу `ssh` ```shell jumpuser@bastion:~ $ sudo systemctl restart ssh ``` Убедиться в отсутствии возможности подключения к узлу `bastion` ```shell jumpuser@srchost ~$ ssh jumpuser@bastion ssh: PTY allocation request failed on channel 0 This account is currently not available. Connection to bastion closed. jumpuser@srchost ~$ ``` Таким образом получается подключиться к `enduser@dsthost` через промежуточный узел `jumpuser@bastion` без возможности подключения к `jumpuser@bastion` ```shell jumpuser@srchost ~$ ssh -A -J jumpuser@srchost enduser@dsthost enduser@dsthost ~$ ``` *** Источник: -