Мне нужно создать туннель 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