विंडोज से स्वचालित SSH टनलिंग


32

मैं अपने लिनक्स सर्वर पर हमेशा दो SSH सुरंगों के लिए एक विंडोज़ कंप्यूटर स्थापित करने की कोशिश कर रहा हूँ।

वर्तमान में, मैं दो SSH सुरंगों को खोलने के लिए PuTTY का उपयोग कर रहा हूं: मैं PuTTY के सर्वर में लॉग इन करता हूं, इसे कम से कम छोड़ता हूं, और इसे कभी नहीं छूता। यह तब तक अच्छी तरह से काम करता है, जब SSH कनेक्शन ड्रॉप हो जाता है, इसके अलावा: PuTTY एक त्रुटि संदेश प्रदर्शित करता है, और मुझे मैन्युअल रूप से त्रुटि को बंद करने और सर्वर को फिर से कनेक्ट करने की आवश्यकता है।

मैं जो करना चाहता हूं, वह एक ऐसा एप्लिकेशन है जो दो एसएसएच सुरंगों को सेट कर सकता है, और स्वचालित रूप से फिर से कनेक्ट कर सकता है, बिना किसी मैन्युअल रूप से कुछ भी करने की आवश्यकता के बिना, एक पासवर्ड दर्ज करें। जो डेटा मैं दो सुरंगों में भेज रहा हूं, वह वीएनसी कनेक्शन है, इसलिए मैं अक्सर त्रुटियों को साफ़ करने और पासवर्ड दर्ज करने के लिए मशीन पर नहीं होता। दो सुरंगें एक स्थानीय सुरंग और एक दूरस्थ सुरंग हैं।

(हां, मुझे SSH में स्वतः लॉग-इन करने के खतरों के बारे में पता है। मैं एक समर्पित उपयोगकर्ता बनाने की योजना बना रहा हूं, जिसमें कोई विशेषाधिकार नहीं है और अंतःक्रियात्मक रूप से लॉग इन करने और इसका उपयोग करने की अनुमति नहीं है।)

मुझे यह सवाल मिला: एसएसएच सुरंग को मज़बूती से कैसे खुला रखा जाए? , लेकिन यह SSH क्लाइंट के रूप में लिनक्स का उपयोग कर रहा है, और मैं विंडोज का उपयोग कर रहा हूं।


2
यदि सही किया जाता है तो स्वचालित लॉगिन कोई खतरा नहीं है। SSH सार्वजनिक कुंजी प्रमाणीकरण देखें
११:११

मैं अब मैनुअल लॉगिन के लिए कर रहा हूं, लेकिन मेरा मानना ​​है कि PuTTY कुंजी को खाली पासवर्ड रखने की अनुमति नहीं देता है।
डेविड यॉ

बिलकुल यह करता है।
grawity

मुझे PuTTY के कुछ दस्तावेज़ों को गलत समझना चाहिए। मैंने शायद "हम आपके लिए कभी भी PuTTY ऑटो-पासवर्ड आपके पासवर्ड को नहीं बनाएंगे" पढ़ा, और यह माना कि कुंजी के रूप में अच्छी तरह से पासवर्ड की आवश्यकता थी।
डेविड याव

जवाबों:


14

बिटविस टनलियर की कोशिश करें - यह मेरे लिए काम करता है। मैंने इसे SSH सुरंगों को स्थापित करने के लिए सेट किया, जबकि केवल ट्रे आइकन के रूप में दिखाई दे रहा था। यह स्टार्टअप पर SSH कनेक्शन स्थापित करता है और कट के बाद या सिस्टम के सो जाने के बाद कनेक्टिविटी बहाल होते ही इसे फिर से स्थापित करता है। मैं अब भी पुट्टी कंसोल के लुक को पसंद करता हूं, इसलिए मैं इसका उपयोग करता रहता हूं - लेकिन सुरंगों को बनाए रखने के लिए मैं अब टनलियर का उपयोग करता हूं। एकमात्र बड़ा नकारात्मक पहलू जो मुझे मिला है वह है आईपीवी 6 सपोर्ट की कमी, जिसे पुट्टी को कोई उपयोगकर्ता कार्रवाई की आवश्यकता नहीं है।


मैं कुछ महीनों से इसका उपयोग कर रहा हूं। यह सही है: सिस्टम ट्रे में बैठता है, किसी भी पॉपअप को डिस्कनेक्ट और इस तरह की शिकायत करता है, और यह सुरंगों को खुला रखता है। मैं अभी भी PuTTY का उपयोग करता हूं अगर मैं कनेक्शन पर बहुत काम करने जा रहा हूं, लेकिन सुरंगों और त्वरित टर्मिनल सामान के लिए, सुरंग सुरंग काम करता है।
डेविड याव

2
यह स्पष्ट नहीं हो सकता है, लेकिन आप C2S टैब में सुरंगों को सेट करते हैं और S2C टैब में सुरंगों को उल्टा करते हैं । यह क्रमशः client2server और server2client के लिए खड़ा है।
fracz

@ जीन-मार्क लिओटियर शायद आप मेरी मदद कर सकते हैं। इसे देखें: superuser.com/questions/1353398/…
सक्सेस मैन

@SuccessMan - मुझे खेद है, यह वर्षों से है जब मैंने किसी Microsoft उत्पाद का सतही से अधिक उपयोग किया है। मैं अब ऑल-डेबियन हूं, जहां इस तरह की समस्या का समाधान तुच्छ रूप से किया जाता है ...
जीन-मार्क लिओटिएर


2

Xshell पर एक नज़र डालें - यह PuTTY की तुलना में अधिक स्क्रिप्ट योग्य है और घरेलू उपयोग के लिए मुफ़्त है (यदि वह जगह है जहाँ आपको उपयोग करने की आवश्यकता है)। यह एक ऑटो-पुनः कनेक्ट करने की सुविधा का दावा करता है, लेकिन मैंने इसे आजमाया नहीं है और अब कुछ महीनों के लिए लिनक्स-आधारित लैपटॉप पर रहा है, इसलिए इसे मो पर परीक्षण करने का कोई साधन नहीं है।


Xshell बहुत बढ़िया है, मैंने इसे 3-4 साल पहले SecureCRT से बदल दिया है और पीछे मुड़कर नहीं देखा
alexeit

2

दो महान उपकरण:

दोनों में वे विशेषताएं हैं:

  • बूट पर स्वचालित किया जा सकता है
  • खुला स्त्रोत
  • एक ही समय में कई सुरंगों का प्रबंधन करें
  • सिस्टम ट्रे में निवास कर सकता है
  • नि: शुल्क (Mobaxterm एक मुक्त संस्करण है)
  • संग्रहीत पासवर्ड एन्क्रिप्ट करें

1. Mobaxterm

साइट: http://mobaxterm.mobatek.net/

कब्जा :

यहाँ छवि विवरण दर्ज करें

2. एसएसएच सुरंग प्रबंधक

साइट: https://code.google.com/archive/p/ssh-tunnel-manager/

कब्जा :

यहाँ छवि विवरण दर्ज करें


2

मैंने एसएसएच सुरंग प्रबंधकों की तरह कई समाधानों की कोशिश की, लेकिन सभी मेरे लिए अनिश्चित थे: बहुत सारे कॉन्फ़िगरेशन स्क्रीन, कभी-कभी छोटी गाड़ी (एक बार एसएसएच सुरंग प्रबंधक ने सभी को शुद्ध कर दिया था! मेरे पास सभी 30 सुरंगों के लिए सेटिंग्स को पुनर्स्थापित करना था)। इसलिए वे सभी मेरा विश्वास खो बैठे। इसलिए मैं कस्टम पॉवरशेल स्क्रिप्ट, आसान विन्यास, परिवर्तनशील, छोटे, लेकिन काम करता हूं। यहाँ और नीचे पोस्ट किया गया :

इसका उपयोग शुरू करने के लिए आपको एक विन्यास की आवश्यकता है:

# LocalPort TargetHost  TargetPort  SshHost SshUsername SshKeyPath 
18080   google.com  80  bastion.example.com User    D:\secure\path\to\private_key.ppk

इसे config.csv के रूप में सहेजें। और इसे रखने के लिए एक पॉवरशेल स्क्रिप्ट का उपयोग करें:

<#
.SYNOPSIS
  Powershell script for keeping ssh tunnel up and running

.DESCRIPTION
  This script uses configuration of tunnels located in config.csv. For more information visit http://tsherlock.tech/2019/03/13/simple-ssh-tunnel-auto-reconnect-using-putty-and-powershell/

.NOTES
  Version:        1.0
  Author:         Anton Shkuratov
  Creation Date:  2019-03-13
  Purpose/Change: Initial script development

#>

$currentDir = $PSScriptRoot
if (-not $env:PATH.Contains($currentDir)) {
  $env:PATH="$env:PATH;$currentDir"
}

# Check plink is accessible
try {
  Start-Process plink.exe -WindowStyle Hidden
} catch {
  Write-Host Error running plink.exe Please make sure its path is in PATH environment variable
  EXIT 1
}

# Parse 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 in $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.Groups[4];
      SshUser = $match.Groups[5];
      SshKey = $match.Groups[6];
    });

    if (-not $keyPasswords.ContainsKey($sshKey)) {
      $pass = Read-Host "Please enter password for key (if set): $sshKey" -AsSecureString
      $keyPasswords.Add($sshKey, $pass);
    }
  }
}

# Starting Processes
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("Wrong passphrase")) {
      Write-Host "Wrong pass phrase for $sshKey, please re-enter"
      $pass = Read-Host "Please enter password for key: $sshKey" -AsSecureString
      $keyPasswords[$sshKey] = $pass;
    } else {
      $exitCode = $proc.ExitCode
      $tHost = $binding.sshHost

      Write-Host "Connection to $tHost is lost, exit code: $exitCode"
    }
  }

  if (-not $procs.ContainsKey($binding) -or $procs[$binding].HasExited) {
    $sshUser = $binding.SshUser
    $sshHost = $binding.SshHost
    $sshKey = $binding.SshKey
    $lPort = $binding.LocalPort
    $tPort = $binding.TargetPort
    $tHost = $binding.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]::Start($psi);

    Start-Sleep 1

    if (-not $proc.HasExited) {
      Write-Host Connected to $sshUser@$sshHost
    }

    $procs[$binding] = $proc;
  }
}

function EnsureAllRunning($procs, $keyPasswords, $bindings) {
  while($true) {
    foreach($binding in $bindings) {
      EnsureRunning $procs $keyPasswords $binding
    }
    Start-Sleep 1
  }
}


try {
  # Waiting for exit command
  Write-Host Working... Press Ctrl+C to stop execution...
  EnsureAllRunning $procs $keyPasswords $bindings
} finally {
  # Clean up
  Write-Host Clean up

  foreach($proc in $procs.Values) {
    if ($proc -ne $null -and -not $proc.HasExited) {
      $proc.Kill();
    }
  }
}

इसे कॉन्फ़िगर करने के बाद इसे ऐसे ही चलाएं:

powershell -File autossh.ps1

1

यदि आपका पोटीनी का प्रशंसक है, तो पुट्टी ट्रे की कोशिश करें ।

इसमें कुछ अतिरिक्त कार्य हैं, जिसमें कनेक्शन विफलता के बाद ऑटो-फिर से कनेक्ट करने का प्रयास करना और जब आपका कंप्यूटर स्टैंडबाय से उठता है तब पुन: कनेक्ट करना शामिल है।

जैसा कि पहले ही किसी और ने उल्लेख किया है, मैं इसे सार्वजनिक-कुंजी प्रमाणीकरण के साथ जोड़ूंगा जिसमें कोई पास-वाक्यांश नहीं है।

सिद्धांत रूप में यह बहुत विश्वसनीय होना चाहिए, लेकिन मैं कोई सुरक्षा विशेषज्ञ नहीं हूं ताकि आप उस मोर्चे पर सलाह न दे सकें।


0

मैंने इसे देखा और अपने प्रश्न के लिए कुछ परिणाम प्राप्त किए, मूल रूप से आप हमेशा एक खोज कॉम्बो की कोशिश कर सकते थे, automate putty loginजो मैंने किया। यहां एक विशेष रूप से उपयोगी परिणाम है जो आपको सूट करना चाहिए:

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

यह आपको पोटीन के लिए मैक्रो सेटअप करने के तरीके के माध्यम से चलता है । यहां भी पोटीन कनेक्शन प्रबंधक डाउनलोड करें (जैसा कि लिंक प्रारंभिक लिंक से टूट गया है):

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


PuttyCM के लिए SourceForge लिंक टूट गया है। इस प्रश्न को देखें ।
क्रेग मैकक्वीन

@CraigMcQueen, आपको पता है कि यह 01/19/2011 में उत्तर दिया गया था !? सही?
जैकब

1
हां, मुझे एहसास है। और मैंने इसे कल एक Google खोज में पाया, और अन्य लोग आने वाले एक या दो साल तक ऐसा कर सकते हैं।
क्रेग मैकक्वीन

0

मैंने पुट्टी का भी इस्तेमाल किया और एक ही समस्या थी जब तक कि मुझे एक बेहतर समाधान नहीं मिला - कोशिश करें ADVSoft Persistent SSH https://persistentssh.com एक Windows सेवा के रूप में काम करता है और SSH सुरंगों को चलाने की स्थिति में रखता है। व्यक्तिगत उपयोग के लिए नि: शुल्क, और कुछ भी स्थापित करने की आवश्यकता नहीं है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.