# 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 ~$ eval "$(ssh-agent)"
jumpuser@srchost ~$ ssh-add .ssh/id_rsa
jumpuser@srchost ~$ 
jumpuser@srchost ~$ ssh -A -J jumpuser@srchost enduser@dsthost
enduser@dsthost ~$ 
```

***

Источник: - <https://habr.com/ru/companies/cloud4y/articles/530516/>
