SSH tunneling อัตโนมัติจาก Windows


32

ฉันกำลังพยายามตั้งค่าคอมพิวเตอร์ Windows ให้มีอุโมงค์ SSH สองช่องไปยังเซิร์ฟเวอร์ Linux ของฉันเสมอ

ขณะนี้ฉันกำลังใช้ PuTTY เพื่อเปิดอุโมงค์ SSH สองแห่ง: ฉันลงชื่อเข้าใช้เซิร์ฟเวอร์ใน PuTTY ปล่อยให้ย่อเล็กสุดและอย่าแตะต้องมัน ใช้งานได้ดียกเว้นเมื่อการเชื่อมต่อ SSH ลดลง: PuTTY แสดงข้อความแสดงข้อผิดพลาดและฉันต้องปิดข้อผิดพลาดด้วยตนเองและเชื่อมต่อกับเซิร์ฟเวอร์อีกครั้ง

สิ่งที่ฉันต้องการทำคือมีแอปพลิเคชันที่สามารถตั้งค่าอุโมงค์ SSH สองแห่งและสามารถเชื่อมต่อใหม่โดยอัตโนมัติโดยไม่ต้องทำอะไรด้วยตนเองรวมถึงป้อนรหัสผ่าน ข้อมูลที่ฉันส่งข้ามอุโมงค์ทั้งสองคือการเชื่อมต่อ VNC ดังนั้นฉันมักจะไม่อยู่ที่เครื่องเพื่อล้างข้อผิดพลาดและป้อนรหัสผ่าน อุโมงค์ทั้งสองเป็นอุโมงค์ท้องถิ่นและอุโมงค์ระยะไกลหนึ่งช่อง

(ใช่ฉันทราบถึงอันตรายของการเข้าสู่ระบบ SSH โดยอัตโนมัติฉันกำลังวางแผนที่จะสร้างผู้ใช้ที่ไม่มีสิทธิ์และไม่ได้รับอนุญาตให้ลงชื่อเข้าใช้แบบโต้ตอบและใช้สิ่งนั้น)

ฉันพบคำถามนี้: จะเปิดอุโมงค์ SSH อย่างน่าเชื่อถือได้อย่างไร แต่นั่นคือการใช้ Linux เป็นไคลเอ็นต์ SSH และฉันใช้ Windows


2
การลงชื่อเข้าใช้อัตโนมัติไม่เป็นอันตรายหากทำถูก เงยหน้าขึ้นมอง SSH การตรวจสอบคีย์สาธารณะ
grawity

ฉันกำลังทำเช่นนั้นสำหรับการเข้าสู่ระบบด้วยตนเองในขณะนี้ แต่ฉันเชื่อว่า PuTTY ไม่อนุญาตให้ใช้รหัสผ่านที่มีรหัสผ่านเปล่า
David Yaw

แน่นอนมันไม่
grawity

ฉันต้องเข้าใจผิดบางส่วนของเอกสาร PuTTY ฉันอาจอ่าน "เราจะไม่ทำ PuTTY พิมพ์รหัสผ่านของคุณให้คุณโดยอัตโนมัติ" และสันนิษฐานว่าจำเป็นต้องใช้รหัสผ่านในคีย์เช่นกัน
David Yaw

คำตอบ:


14

ลองBitvise Tunnelier - มันใช้งานได้สำหรับฉัน ฉันตั้งค่าให้สร้างอุโมงค์ SSH ในขณะที่มองเห็นเป็นไอคอนถาดเท่านั้น มันสร้างการเชื่อมต่อ SSH เมื่อเริ่มต้นและสร้างขึ้นใหม่ทันทีที่การเชื่อมต่อได้รับการกู้คืนหลังจากการตัดหรือหลังจากที่ระบบเข้าสู่โหมดสลีป ฉันยังคงชอบรูปลักษณ์ของคอนโซล Putty ดังนั้นฉันจึงใช้มันต่อไป - แต่เพื่อให้ทันอุโมงค์ฉันได้ใช้ Tunnelier แล้ว ข้อเสียที่สำคัญอย่างเดียวที่ฉันพบคือการขาดการสนับสนุน IPv6 ซึ่ง Putty ให้บริการโดยไม่ต้องมีการดำเนินการของผู้ใช้


ฉันใช้สิ่งนี้มาสองสามเดือนแล้ว มันถูกต้อง: อยู่ในถาดระบบปิดป๊อปอัปใด ๆ ที่บ่นเกี่ยวกับการตัดการเชื่อมต่อและเช่นนั้นและมันทำให้อุโมงค์เปิดอยู่ ฉันยังคงใช้ PuTTY ถ้าฉันจะทำงานได้มากผ่านการเชื่อมต่อ แต่สำหรับอุโมงค์ & สิ่งที่เทอร์มินัลอย่างรวดเร็ว Tunnelier ทำงานได้ดี
David Yaw

2
อาจไม่ชัดเจน แต่คุณตั้งค่าอุโมงค์ในแท็บC2Sและย้อนกลับอุโมงค์ในแท็บS2C มันหมายถึงclient2serverและserver2clientตามลำดับ
fracz

@ Jean-Marc Liotier บางทีคุณสามารถช่วยฉันได้ ดูที่นี่: superuser.com/questions/1353398/…
Success Man

@SuccessMan - ฉันขอโทษที่ผ่านมาหลายปีแล้วที่ฉันใช้ผลิตภัณฑ์ Microsoft มากกว่าผิวเผิน ตอนนี้ฉันเป็นเดเบียนทั้งหมดแล้วที่ปัญหาแบบนี้แก้ไขได้เล็กน้อย ...
Jean-Marc Liotier


2

ดูXshell - มันเป็นสคริปต์ได้มากกว่า PuTTY และฟรีสำหรับใช้ในบ้าน (ถ้านั่นคือสิ่งที่คุณต้องการใช้) มันอ้างว่ามีคุณสมบัติการเชื่อมต่ออัตโนมัติใหม่ แต่ฉันไม่ได้ลองเลยและเคยใช้แล็ปท็อปที่ใช้ระบบปฏิบัติการ Linux มาหลายเดือนแล้วดังนั้นตอนนี้จึงไม่มีวิธีทดสอบที่ mo


Xshell ยอดเยี่ยมฉันได้เปลี่ยนมาจาก SecureCRT เมื่อ 3-4 ปีที่แล้วและไม่ได้หันกลับมามอง
alexeit

2

เครื่องมือที่ยอดเยี่ยมสองอย่าง:

ทั้งสองมีคุณสมบัติเหล่านั้น:

  • อาจเป็นแบบอัตโนมัติตอนบูต
  • โอเพ่นซอร์ส
  • จัดการอุโมงค์จำนวนมากในเวลาเดียวกัน
  • อาจอยู่ในถาดระบบ
  • ฟรี (Mobaxterm มีรุ่นฟรี)
  • เข้ารหัสรหัสผ่านที่เก็บไว้

1. Mobaxterm

ไซต์: http://mobaxterm.mobatek.net/

การจับกุม :

ป้อนคำอธิบายรูปภาพที่นี่

2. ผู้จัดการอุโมงค์ SSH

ไซต์: https://code.google.com/archive/p/ssh-tunnel-manager/

การจับกุม :

ป้อนคำอธิบายรูปภาพที่นี่


2

ฉันพยายามแก้ไขปัญหาหลายอย่างเช่นผู้จัดการอุโมงค์ SSH แต่ทั้งหมดไม่สะดวกสำหรับฉัน: หน้าจอการกำหนดค่ามากเกินไปบางครั้งก็บั๊ก (บางครั้ง SSH จัดการอุโมงค์ล้างการตั้งค่าทั้งหมด! ฉันมี! ดังนั้นพวกเขาทั้งหมดสูญเสียความไว้วางใจของฉัน นั่นเป็นเหตุผลที่ฉันมากับสคริปต์ Powershell ที่กำหนดเองง่ายกำหนดค่าเปลี่ยนแปลงเล็ก แต่ใช้งานได้ โพสต์ที่นี่และด้านล่าง:

ในการเริ่มใช้งานคุณต้องมีการกำหนดค่าดังนี้:

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

บันทึกเป็น config.csv และใช้สคริปต์ powershell เพื่อติดตามคือ:

<#
.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/

มันจะแนะนำคุณเกี่ยวกับวิธีตั้งค่าแมโครให้เป็นสีโป๊ว ดาวน์โหลดตัวจัดการการเชื่อมต่อ Putty ที่นี่ด้วย (เนื่องจากลิงก์เสียจากลิงก์เริ่มต้น):

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


ลิงก์ SourceForge สำหรับ PuttyCM นั้นใช้งานไม่ได้ ดูคำถามนี้
Craig McQueen

@CraigMcQueen คุณรู้ไหมว่านี่ได้รับคำตอบในวันที่ 19/19/2011 !? ขวา?
Jakub

1
ใช่ฉันรู้แล้ว และฉันพบมันในการค้นหาของ Google เมื่อวานนี้และคนอื่น ๆ อาจทำเช่นนั้นประมาณหนึ่งหรือสองปีข้างหน้า
Craig McQueen

0

ฉันใช้ Putty ด้วยและมีปัญหาเดียวกันจนกระทั่งพบวิธีแก้ปัญหาที่ดีกว่า - ลองใช้ ADVSoft Persistent SSH https://persistentssh.com ทำงานเป็นบริการของ Windows และทำให้อุโมงค์ SSH อยู่ในสถานะทำงาน ฟรีสำหรับใช้ส่วนตัวไม่จำเป็นต้องติดตั้งอะไรอีก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.