youatwork@officepc$ autossh -R 12345:localhost:22 notroot@serverpc
Пізніше:
you@homepc$ autossh -L 23456:localhost:12345 notroot@serverpc
you@homepc$ ssh youatwork@localhost -p 23456
Що ви можете зробити так: на кроці 1 перенесіть віддалений порт з офісного ПК на сервер ( 12345
використовується як приклад, будь-який порт> 1024 повинен зробити). Тепер підключення до 12345 на сервері повинно підключити вас до порту 22 на officepc.
На кроці 2 перенесіть порт 23456 з вашої домашньої машини на 12345 на сервері (звідки він буде перенаправлений на officepc: 22, як встановлено на кроці 1)
На кроці 3 ви підключаєтесь до локального порту 23456 за допомогою входу в офісний ПК . Це направляється через крок 2 на порт 12345 на вашому сервері, а через крок 1 - на ваш офісний ПК.
Зауважте, що я використовую autossh для переадресації, так як це оболонка ssh, яка автоматично відновлює тунель у разі його відключення; однак нормальний ssh також буде працювати, доки з'єднання не перестане.
Можлива вразливість: кожен, хто може підключитися до localhost: 12345 на serverpc, тепер може підключитися до officepc: 22 і спробувати зламати його. (Зверніть увагу, що якщо ви працюєте з сервером SSH, то все одно слід закріпити його над основними захистами, які за замовчуванням увімкнено; я рекомендую принаймні вимкнути кореневе вхід та відключити автентифікацію пароля - див., Наприклад, це )
Редагувати : я підтвердив це тим же конфігурацією, і він працює. GatewayPorts no
впливає лише на порти, відкриті для світу взагалі, а не локальні тунелі. Це перенаправлені порти:
homepc:
outgoing ssh to serverpc:22
listening localhost:23456 forwarded through ssh tunnel
serverpc:
listening ssh at *:22
incoming localhost ssh tunnel (from homepc) forwarded to localhost:12345
listening localhost ssh tunnel (from officepc) forwarded from localhost:12345
officepc:
outgoing ssh to serverpc:22
incoming localhost through ssh tunnel (from serverpc) forwarded to localhost:22
Отже, що стосується мережевого стеку, то це весь локальний трафік у відповідних інтерфейсах зворотного зв'язку (плюс ssh-з'єднання з serverpc); отже, GatewayPorts
не перевіряється взагалі.
Однак є директива AllowTcpForwarding
: якщо це так no
, ця настройка не вдасться, оскільки пересилання не дозволено взагалі, навіть через інтерфейс зворотного зв'язку.
Застереження :
якщо ви використовуєте autossh та нещодавній ssh, можливо, ви хочете використовувати ssh ServerAliveInterval
та ServerAliveCountMax
для збереження тунелю. У Autossh є вбудована перевірка, але, мабуть, у Fedora є деякі проблеми. -M0
вимикає це і -oServerAliveInterval=20 -oServerAliveCountMax=3
перевіряє, чи не працює з’єднання - намагається кожні 20 секунд, якщо він не вдається 3 рази поспіль, зупиняє ssh (і autossh робить новий):
autossh -M0 -R 12345:localhost:22 -oServerAliveInterval=20 -oServerAliveCountMax=3 notroot@serverpc
autossh -M0 -L 23456:localhost:12345 -oServerAliveInterval=20 -oServerAliveCountMax=3 notroot@serverpc
може бути корисним перезапустити ssh-тунель, якщо перехід не виходить, використовуючи -oExitOnForwardFailure=yes
- якщо порт вже пов'язаний, ви можете отримати робоче SSH-з'єднання, але немає перенаправленого тунелю.
використання ~/.ssh/config
параметрів (і портів) доцільно, інакше командні рядки надто багатослівні. Наприклад:
Host fwdserverpc
Hostname serverpc
User notroot
ServerAliveInterval 20
ServerAliveCountMax 3
ExitOnForwardFailure yes
LocalForward 23456 localhost:12345
Тоді ви можете використовувати лише псевдонім сервера:
autossh -M0 fwdserverpc