С помощью ProxyCommand
в вашей конфигурации SSH.
Создайте файл конфигурации SSH в вашем домашнем каталоге (если вы не хотите сделать это общесистемным), ~/.ssh/config
:
Host unibroker # Machine B definition (the broker)Hostname 12.34.45.56 # Change this IP address to the address of the brokerUser myusername # Change this default user accordingly # (`user@unibroker` can overwrite it)Host internalmachine # Machine A definition (the target host)ProxyCommand ssh -q unibroker nc hostname.or.IP.address.internal.machine 22
Теперь вы можете напрямую связаться с машиной А с помощью
ssh user@internalmachine
Также обратите внимание, что теперь у вас есть одно целевое имя SSH-хоста для него, вы можете использовать его и в других приложениях. Например.:
-
SCP для копирования файлов.
scp somefile user@internalmachine:~/
-
В ваших приложениях с графическим интерфейсом:
использовать sftp://user@internalmachine/
в качестве местоположения для просмотра на компьютере.
На основе KDE (Dolphin): используйте fish://user@internalmachine/
Записи
Изменить hostname.or.IP.address.internal.machine
и порт (22
) к машине, до которой вы хотели бы дотянуться, как если бы вы были от unibroker
машина.
В зависимости от версий netcat на хосте unibroker, -q0
опция должна быть опущена. Что касается аутентификации; вы в основном настраиваете два SSH-соединения со своей рабочей станции. Это означает, что как хост unibroker, так и хост internalmachine проверяются / аутентифицируются друг против друга (как для пары ключей / пароля, так и для проверки ключа хоста).
Объяснение
Этот подход к использованию ProxyCommand
и "netcat" - это всего лишь один из способов сделать это. Мне это нравится, потому что мой SSH-клиент напрямую связывается с целевой машиной, так что я могу проверить ключ хоста у своего клиента, и я могу использовать аутентификацию с открытым ключом, не используя другой ключ у брокера.
Каждый Host
определяет начало нового раздела хоста. Hostname
является целевым именем хоста или IP-адресом этого хоста. User
это то, что вы бы предоставили в качестве пользовательской части в ssh user@hostname
.
ProxyCommand
будет использоваться в качестве канала к целевой машине. Используя SSH для подключения к первой машине и непосредственно настраивая простой "netcat" (nc
) к цели оттуда, это в основном просто пересылка открытого текста на внутреннюю машину от посредника между ними. То -q
варианты заключаются в том, чтобы отключить любой вывод (просто личные предпочтения).
Убедитесь, что у вас установлен netcat на брокере (обычно доступен по умолчанию в Ubuntu) - либо netcat-openbsd
или netcat-традиционный
.
Обратите внимание, что здесь вы по-прежнему дважды используете SSH с шифрованием. В то время как канал netcat является открытым текстом, ваш SSH-клиент на вашем ПК настроит другой зашифрованный канал с конечной целевой машиной.