Я подключаюсь к хосту 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