Назад | Перейти на главную страницу

Файл конфигурации ssh на промежуточном хосте игнорируется для прокси-сервера ssh с помощью команды proxycommand

Я подключаюсь к хосту b через хост a

Host host-a
    HostName 10.8.0.1
    Port 333
    User host_admin
    IdentityFile ~/.ssh/id-ecdsa-admin

Host host-b
    HostName 1.1.1.1
    Port 567
    ProxyCommand ssh -q -W %h:%p host-a
    User host_user

На моем хост-сервер для host_admin в /home/host_admin/.ssh/config у меня есть:

Host *
   IdentityFile ~/.ssh/id-ecdsa-admin
   User host_user
   Port 567

Я ожидаю, что эта команда прокси будет учитывать эти User / Port / IdentityFile при подключении к другому ssh, но они, похоже, игнорируются.

Я знаю, что их игнорируют, потому что, когда я удаляю Порт и Пользователь из конфигурации host-b я не могу подключиться. Разве не следует рассматривать те из конфигурации ssh пользователя host-b?

Host host-b
        HostName 1.1.1.1
        ProxyCommand ssh -q -W %h host-a

В чем тут загвоздка?

Разве не следует рассматривать те из конфигурации ssh пользователя host-b?

Нет, соединение с хоста-a и хост-b исходит от вашего клиента. Ни в коем случае не вызывается клиент ssh в промежуточной системе. В этой промежуточной системе не открывается оболочка, в нее и из нее не передаются файлы.

При использовании ProxyJump / ProxyCommand ваши ключи должны находиться непосредственно на клиенте.

С вашей конфигурацией ваш компьютер подключится к host-a и в основном создайте порт для 1.1.1.1:567 в качестве сокета, и это будет работать как фоновый процесс. Затем ваш компьютер запустит второй процесс ssh, который подключится напрямую к этому сокету с переадресацией порта.

ProxyCommand / ProxyJump ничего подобного не делает ssh host-a bash -c "ssh host-b"

Или, другими словами, ProxyJump в основном делает что-то вроде этого. Просто отчасти автоматически.

# build tunnel in background
ssh -N -L 2200:1.1.1.1:567 10.8.0.1 -p 333 &
# connect to host-b through the tunnel
ssh 127.0.0.1 -p 2200