diff --git a/images/ssh01.drawio b/images/ssh01.drawio new file mode 100644 index 0000000..830ae0a --- /dev/null +++ b/images/ssh01.drawio @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/images/ssh01.png b/images/ssh01.png new file mode 100644 index 0000000..9732069 Binary files /dev/null and b/images/ssh01.png differ diff --git a/ssh_over_jump.md b/ssh_over_jump.md new file mode 100644 index 0000000..4c378e0 --- /dev/null +++ b/ssh_over_jump.md @@ -0,0 +1,84 @@ +# 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 +``` + +Таким образом получается подключиться к `enduser@dsthost` через промежуточный узел `jumpuser@bastion` без возможности подключения к `jumpuser@bastion` + +```shell +jumpuser@srchost ~$ ssh -A -J jumpuser@srchost enduser@dsthost +enduser@dsthost ~$ +```