Я могу подключиться по SSH к серверу Jump Host B с моей локальной машины A через ssh B
.
Сервер C адресуем (имеет адрес C.internal) и доступен из B только через ssh C
.
Как подключиться по SSH к C напрямую с моей локальной машины?
Как будут выглядеть команда SSH и файл конфигурации?
Конфигурация ssh на A:
Host B
User userB
HostName B.example.com
IdentityFile ~/.ssh/keyB
Конфигурация ssh на B:
Host C
HostName C.internal
User userC
IdentityFile ~/.ssh/keyC
Можно ли это сделать без копирования ~/.ssh/keyC
с хоста B на локальную машину A?
решение1
Существует несколько вариантов, но ни один из них не является «единой командой»:
Вы можете запустить команду SSH для B, которая просто запустит вторую команду SSH для C; вам нужно добавить опцию, -t
чтобы она работала для интерактивного SSH:
ssh -t hostB "ssh hostC"
ssh -t hostB "ssh -t hostC htop"
ssh hostB ssh hostC ls -la /etc
Если вам нужен способ SSH «напрямую» из A в C, вам понадобится дополнительное приспособление для перенаправления соединения ssh-agent.из Бк местной системе (т.е. наоборот тому, что ssh -A
обычно делается).
SSH к хосту B, затем запустите ssh-agent по указанному вручную пути. Используйте функцию SSH "stream forward", чтобы разрешить локальным клиентам доступ к удаленному процессу агента:
HostA$ ssh -t -L /tmp/agent:/tmp/agent HostB \ "ssh-agent -a /tmp/agent sh -c 'ssh-add ~/.ssh/keyC && sleep infinity'"
(Опция ssh/config —
LocalForward
.)Пока указанное выше соединение работает, вы можете подключиться с HostA на HostC, используя обычную конфигурацию ProxyJump, используя ключи, которые существуют только на HostB:
HostA$ export SSH_AUTH_SOCK=/tmp/agent HostA$ ssh -J HostB HostC
(Параметры ssh/config —
IdentityAgent
иProxyJump
.)
Другой вариант — скопировать keyC
из B в A и сохранить его.на защищенном оборудованиинапример, чип TPM или смарт-карта (Yubikey с режимом PIV также считается). Это позволяет использовать ключ локально на машине A без возможности его кражи.
(Для TPM2.0 в Linux можно выбрать либо , tpm2-pkcs11
либо ssh-tpm-agent
; TPM2.0 в Windows можно использовать через PuTTY-CAC. Для Yubikeys с PIV существуют модули PKCS#11 как для Windows, так и для Linux. Я использую eToken 5110 с Ebay. Также есть способ использовать ключи FIDO2 с SSH, но для этого потребуется сгенерировать новый ключ.)
решение2
Вам нужен файл ssh_config, например глобальный /etc/ssh/ssh_config
или пользовательский ~/.ssh/config
:
Host B
HostName 10.0.0.1
User username_on_B
IdentityFile ~/.ssh/id_rsa_for_B
ForwardAgent yes
# final destination
Host C
HostName C.internal
User your_username_on_C
ProxyJump B
IdentityFile ~/.ssh/id_rsa_for_C
Теперь, из A
, вы можете ssh
C
.