Как создать SSH-туннель с помощью PuTTY в Windows?

Мне нужно создать туннель SSH с помощью PuTTY в Windows, который будет делать то же самое, что и эта команда в Linux:

  ssh -fN -L 2000: SomeIp:  2000 myusername @ myLinuxBox  

Я пробовал много вариантов в PuTTY, включая установку исходного порта в графическом интерфейсе на «2000» и назначения на «SomeIp: 2000». Назначение установлено на локальное (как предполагает переключатель -L ).

Я успешно вхожу в свой SSH-ящик, но переадресация порта не выполняется.

Возможно ли это даже в Windows, чтобы все соединения, выполняемые программами, использующими этот порт (2000), проходили через этот туннель?


Вероятно, вы захотите использовать plink.exe вместо клиента графического интерфейса. Синтаксис командной строки совместим с iirc.


С набором PuTTY вы можете настроить туннель либо с помощью сам PuTTY (GUI) или с помощью инструмента командной строки plink.exe .


С помощью plink.exe , вы используете те же аргументы, что и для OpenSSH ssh , за исключением -f , аналогов которому нет в Windows.

plink.exe -N -L 2000: SomeIp: 2000 myusername @ myLinuxBox  

Ссылка: Использование инструмента подключения из командной строки Plink


В PuTTY -L 2000: SomeIp: 2000 преобразуется в:

Итак, это на самом деле то, что вы утверждаете, что пробовали. Если у вас возникли проблемы, используйте журнал событий PuTTY для исследования:

-N переводится в параметр «Не запускать оболочку или команду вообще» .

Но, вероятно, нет смысла включать его в GUI-клиент, поскольку у вас все равно есть окно, вы просто ничего не можете с ним поделать. См. Также PuTTY wish no-terminal-window.


Если вы собираетесь использовать туннель для подключения с помощью PuTTY к другому серверу, вы можете настроить туннель как часть настроек сеанса с использованием plink в качестве прокси, см. Конфигурация PuTTY, эквивалентная OpenSSH ProxyCommand.


Или вы можете пробираться через графический интерфейс шпатлевки, который также позволяет это. См. Connection> SSH> Tunnels слева с деревом параметров.

1


В приведенных выше ответах упоминаются два разных способа решения проблемы:

  • с использованием plink
  • с использованием графического интерфейса Putty

У меня нет плагина и я не могу его скачать. exe-файл (это тщательно контролируемая ограниченная среда), поэтому мы использовали другой способ создания сценария решения с помощью однострочного сценария:

  start putty -ssh myusername @ myLinuxBox -pw  my_pw -L 2000: localhost: 2000  

Сохраните это в пакетном файле (расширение файла «.bat», например, «tunnel.bat»). Таким образом, каждый раз, когда вы дважды щелкаете по этому файлу, команда запускается, и putty создает туннель ssh. Если вам нужно больше туннелей, просто повторите эту часть

-L 2000: localhost: 2000

, изменив порты соответствующим образом.

4


Порт «Source» — это номер порта на том же компьютере, с которого вы запускаете putty (например, откройте его в своем браузере: 127.0.0.1:source). «Пункт назначения» — это ваш удаленный порт, к которому вы хотите подключиться с локального компьютера. Это начало работать после того, как я понял это.



Автоматическое SSH-туннелирование из Windows

Я пытаюсь настроить компьютер с Windows, чтобы всегда было два SSH-туннеля к моему серверу Linux.

В настоящее время я использую PuTTY для открытия двух туннелей SSH: я вхожу на сервер в PuTTY, оставляю его свернутым и никогда не касаюсь его. Это работает хорошо, за исключением случаев, когда соединение SSH обрывается: PuTTY отображает сообщение об ошибке, и мне нужно вручную закрыть ошибку и повторно подключиться к серверу.

Я бы хотел получить приложение, которое может настроить два SSH-туннеля и автоматически переподключиться, без необходимости делать что-либо вручную, включая ввод пароля. Данные, которые я отправляю через два туннеля, представляют собой соединения VNC, поэтому я часто не нахожусь на машине, чтобы очистить ошибки и ввести пароли. Два туннеля — это один локальный туннель и один удаленный туннель.

(Да, я знаю об опасностях автоматического входа в SSH. Я планирую создать специального пользователя без каких-либо привилегий и не разрешенного для интерактивного входа в систему, и использовать его.)

Я нашел этот вопрос: как надежно держать SSH-туннель открытым ?, но при этом используется Linux в качестве клиента SSH, а я использую Windows.


Попробуйте Bitvise Tunnelier — у меня он работает. Я установил его для создания туннелей SSH, пока он отображается только как значок в трее. Он устанавливает соединение SSH при запуске и восстанавливает его, как только соединение восстанавливается после отключения или после того, как система переходит в спящий режим. Я по-прежнему предпочитаю внешний вид консоли Putty, поэтому продолжаю ее использовать, но теперь для поддержания туннелей я использую Tunnelier. Единственный серьезный недостаток, который я обнаружил, — это отсутствие поддержки IPv6, которую Putty предоставляет без каких-либо действий со стороны пользователя.


Попробуйте MyEnTunnel. Он может повторно подключаться при сбое подключения.

5


Два отличных инструмента:

Оба имеют следующие особенности:

  • Может быть автоматизировано при загрузке
  • Открытый исходный код
  • Управляйте множеством туннелей одновременно.
  • Может находиться на панели задач.
  • Бесплатно (у Mobaxterm есть бесплатная версия)
  • Зашифровать сохраненный пароль

1. Mobaxterm

Сайт: http://mobaxterm .mobatek.net/

Захват:

2. Диспетчер туннелей SSH

Сайт: https://code.google.com/archive/p/ssh-tunnel- manager/

Захват:


Я пробовал много решений, например SS H, но все они были для меня неудобны: слишком много экранов конфигурации, иногда с ошибками (один раз диспетчер туннелей SSH очистил все! настройки у меня были! Поэтому пришлось восстановить настройки для всех 30 туннелей). Так что все они потеряли мое доверие. Вот почему я придумал собственный скрипт Powershell, легко настраиваемый, изменяемый, небольшой, но работающий. Размещено здесь и ниже:

Чтобы начать его использовать, вам понадобится такая конфигурация:

  # LocalPort TargetHost TargetPort SshHost SshUsername SshKeyPath 18080 google.com  80 bastion.example.com Пользователь D:  secure  path  to  private_key.ppk  

Сохраните его как config.csv. И используйте сценарий PowerShell, чтобы поддерживать его:

   $ currentDir = $ PSScriptRootif (-not $ env: PATH.Contains ($ currentDir)) {$ env: PATH = "$ env: PATH; $ currentDir"} # Проверить ссылку  доступен попробуйте {Start-Process plink.exe -WindowStyle Hidden} catch {Ошибка записи хоста при запуске plink.exe Убедитесь, что его путь находится в переменной среды PATH EXIT 1} # Анализируйте config $ config = [System.IO.File]:  : ReadAllLines ("$ currentDir  config.csv"); $ bindings = New-Object System.Collections.ArrayList $ regex = New-Object System.Text.RegularExpressions.Regex ("( d) +  s ([^]  +)  s ( d +)  s ([^] +)  s ([^] +)  s ([^] +) ", [System.Text.RegularExpressions.RegexOptions] :: IgnoreCase); $ keyPasswords  = @ {} $ procs = @ {} foreach ($ line в $ config) {$ match = $ regex.Match ($ line) if ($ match.Success) {$ sshKey = $ match.Groups [6];  $ bindings.Add (@ {LocalPort = $ match.Groups [1]; TargetHost = $ match.Groups [2]; TargetPort = $ match.Groups.Groups [3]; SshHost = $ match. Группы [4];  SshUser = $ match.Groups [5];  SshKey = $ match.Groups [6];  });  if (-not $ keyPasswords.ContainsKey ($ sshKey)) {$ pass = Read-Host "Введите пароль для ключа (если установлен): $ sshKey" -AsSecureString $ keyPasswords.Add ($ sshKey, $ pass);  }}} # Запуск процессовfunction EnsureRunning ($ procs, $ keyPasswords, $ binding) {if ($ procs.ContainsKey ($ binding) -and $ procs [$ binding] .HasExited) {$ proc = $ procs [$ binding] $  sshKey = $ binding.sshKey $ out = $ proc.StandardError.ReadToEnd () if ($ out.Contains ("Неверная кодовая фраза")) {Write-Host "Неверная парольная фраза для $ sshKey, введите повторно" $ pass =  Read-Host «Пожалуйста, введите пароль для ключа: $ sshKey» -AsSecureString $ keyPasswords [$ sshKey] = $ pass;  } else {$ exitCode = $ proc.ExitCode $ tHost = $ binding.sshHost Write-Host "Соединение с $ tHost потеряно, код выхода: $ exitCode"}} if (-not $ procs.ContainsKey ($ binding) -или  $ procs [$ binding] .HasExited) {$ sshUser = $ binding.SshUser $ sshHost = $ binding.SshHost $ sshKey = $ binding.SshKey $ lPort = $ binding.LocalPort $ tPort = $ binding.TargetPort $ tHost = $ привязка  .TargetHost $ sshKeyPass = [Runtime.InteropServices.Marshal] :: PtrToStringAuto ([Runtime.InteropServices.Marshal] :: SecureStringToBSTR ($ keyPasswords [$ sshKey])) $ psi = New-Object System.Diagnostics.ProcessStartInfo;  $ psi.FileName = "plink.exe";  $ psi.UseShellExecute = $ false;  $ psi.CreateNoWindow = $ true;  $ psi.RedirectStandardInput = $ true;  $ psi.RedirectStandardError = $ true;  $ psi.Arguments = "-ssh $ sshUser @ $ sshHost -i` "$ sshKey`" -batch -pw $ sshKeyPass -L $ lPort`: $ tHost`: $ tPort "$ proc = [System.Diagnostics.Process]  :: Начало ($ psi);  Start-Sleep 1 if (-not $ proc.HasExited) {Write-Host подключен к $ sshUser @ $ sshHost} $ procs [$ binding] = $ proc;  }} function EnsureAllRunning ($ procs, $ keyPasswords, $ bindings) {while ($ true) {foreach ($ binding in $ bindings) {EnsureRunning $ procs $ keyPasswords $ binding} Start-Sleep 1}} try {# Ожидание выхода  команда Write-Host работает ... Нажмите Ctrl + C, чтобы остановить выполнение ... EnsureAllRunning $ procs $ keyPasswords $ bindings} finally {# Очистить Write-Host Очистить foreach ($ proc в $ procs.Values) {if ($  proc -ne $ null -and -not $ proc.HasExited) {$ proc.Kill ();  }}}  

После настройки просто запустите его так:

  powershell -File autossh.ps1  


Взгляните на Xshell — он более доступен для сценариев, чем PuTTY, и бесплатный для домашнего использования (если нужно именно там). Он утверждает, что имеет функцию автоматического переподключения, но я не пробовал ее и уже несколько месяцев пользуюсь ноутбуком на базе Linux, так что у меня нет никаких средств для тестирования в данный момент.

1


Если вы поклонник Putty, попробуйте из лотка для замазки.

Он имеет несколько дополнительных функций, включая попытку автоматического повторного подключения после сбоя подключения и повторное подключение, когда ваш компьютер выходит из ждущего режима.

Как уже упоминалось кем-то другим. , Я бы совмещал это с аутентификацией с открытым ключом без парольной фразы.

Теоретически это должно быть довольно надежно, но я не эксперт по безопасности, поэтому не могу посоветовать вам в этом отношении .


Я погуглил и получил несколько результатов по вашему вопросу, в принципе, вы всегда можете попробовать поисковую комбинацию Automate Putty Login , что я и сделал. Вот особенно полезный результат, который должен вам подойти:

http://www.neox.net/w/2008/04/22/putty-auto-login-macro-putty-connection- manager/

В нем рассказывается, как настроить макрос для замазки. Также загрузите диспетчер соединений Putty здесь (поскольку ссылка не работает в исходной ссылке):

http://sourceforge.net/projects/puttycm/

3


Я также использовал Putty и имел ту же проблему, пока не нашел лучшее решение — попробуйте ADVSoft Persistent SSH https://persistentssh.com работает как служба Windows и поддерживает SSH-туннели в рабочем состоянии. Бесплатно для личного использования, ничего устанавливать не нужно.

1

Оцените статью
clickpad.ru
Добавить комментарий