การประมวลผลคำสั่งแบบโลคัลหลังจาก ssh tunneling และการเชื่อมต่อ ssh ยังคงอยู่ในคอนโซล


0

มันเป็นคำถามต่อเนื่อง: การดำเนินการของคำสั่งภายในเครื่องหลังจาก ssh tunneling " .

ฉันมีสิ่งนี้:

ssh -f -L 555:localhost:555 10.0.0.1 sleep 10
vncviewer

อย่างไรก็ตามในกรณีดังกล่าวการเชื่อมต่อ ssh ไปที่พื้นหลังและฉันไม่สามารถเรียกใช้คำสั่งใด ๆ บนเครื่องระยะไกล

ดังนั้นคำถามของฉันคือฉันจะอยู่ในคอนโซล ssh และเรียกใช้ vncviewer ได้อย่างไร ในกรณีของฉันมันคือ TigerVNC


มีเหตุผลที่คุณไม่สามารถทำงานได้หรือไม่ vncviewer ก่อน ssh (เช่นในพื้นหลัง)? บางทีคุณอาจต้องการอุโมงค์ที่จะสร้างก่อน ฉันเดาถูกมั้ย
Kamil Maciorowski

ใช่แล้ว สำหรับ "vncviewer" ฉันมีสคริปต์ที่รับอินพุตจากบรรทัดคำสั่งเช่น "./myserverssh vnc" หากมีคำหลัก "vnc" อยู่ที่นั่นฉันต้องการให้ ssh console และ vnc เปิดใช้งาน หากคำสั่งของฉันเป็นเพียง "./myserverssh" ดังนั้นฉันจึงต้องการเปิดใช้คอนโซล ssh เท่านั้น เห็นได้ชัดว่ามันสามารถทำงานได้ถ้าฉันเปิด vnc ก่อน แต่ในกรณีที่ไม่มีการเชื่อมต่อฉันจะต้องปิด vncviewer ด้วยตนเอง มันไม่ใช่เรื่องใหญ่ แต่ฉันอยากจะดูว่ามีวิธีทำให้ถูกต้องหรือไม่
Ne Nenne

คำตอบ:


1

หากคุณจำเป็นต้องสร้างอุโมงค์เป็นครั้งแรกและเรียกใช้ vncviewer ในภายหลังและจากนั้นไปที่รีโมตคอนโซลนี่เป็นสคริปต์พื้นฐาน:

#!/bin/sh

tmpd="$(mktemp -d)" || exit 1         # temporary directory creation
srvr=10.0.0.1                         # remote server
sckt="$tmpd"/"$$-${srvr}".socket      # control socket for SSH connection sharing

clean() { rm -rf "$tmpd"; }           # cleaning function, removes the temporary directory

                                      # establishing SSH master connection
ssh -o ControlMaster=yes \
    -o ControlPath="$sckt" \
    -o ExitOnForwardFailure=yes \
    -Nf -L 555:localhost:555 "$srvr" || { clean; exit 2; }

                                      # the tunnel is now established
vncviewer >/dev/null 2>&1 &           # silent custom command in the background
ssh -o ControlPath="$sckt" "$srvr"    # reusing the master connection
                                      # (exit the remote shell to continue)
wait $!                               # waiting for vncviewer to terminate
ssh -o ControlPath="$sckt" \
    -O exit "$srvr"                   # terminating the master connection
clean || exit 4                       # removing the temporary directory

ทดสอบกับไคลเอนต์ Kubuntu ที่เชื่อมต่อกับเซิร์ฟเวอร์ Debian ฉันไม่แน่ใจว่ามันแข็งแกร่งแค่ไหน ถือเป็นข้อพิสูจน์แนวคิด ดู man 1 ssh และ man 5 ssh_config สำหรับรายละเอียด


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