notes/ssh_over_jump.md

108 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 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/>