SSH Tunnelling ด้วยสองขั้นตอน

เพื่อการทำงานกับ application แบบ real-time ผ่าน web browser บนระบบ TARA

user จะต้อง submit job และได้ทรัพยากรมารันแล้ว (job status เป็น R - Running, ได้ HPC node) เท่านั้น จึงจะสามารถใช้วิธีการนี้ได้ และแนะนำให้เรียกใช้ทรัพยากรในรูปแบบ sinteract

 

หลังจาก submit job เข้าสู่ระบบ TARA แล้ว หาก application นั้นสามารถทำงานแบบ interactive หรือมีรายงานการทำงานแบบ real-time ผ่านทาง web browser ผู้ใช้งานสามารถใช้การ tunnelling เพื่อเข้าถึง port application ที่กำลังใช้งาน และเปิดใน web browser ในเครื่องของตนเองได้

การทำ SSH Tunnelling จากเครื่อง local ไปยัง TARA มี 2 ขั้นตอนดังนี้

1. ทำ SSH Tunnelling

1.1. สำหรับระบบปฏิบัติการ macOS หรือ Linux

เปิดโปรแกรม terminal ที่ computer ของผู้ใช้งาน จากนั้นระบุคำสั่ง

$ ssh -J <username>@tara.nstda.or.th \ -L <local-port>:localhost:<application-port> \ -vN <username>@<tara-X-XXX>

โดย

<username> คือ username ของระบบ TARA

<local-port> คือ port ที่ต้องการใช้งานบน computer ของผู้ใช้งาน

<application-port> คือ port ที่ application ใช้งานอยู่

<tara-X-XXX> คือ HPC node ที่ application ใช้งานอยู่ เช่น tara-c-001

 

จากนั้นระบุรหัสผ่านของระบบ TARA โดยระบบจะถาม 2 ครั้ง

ครั้งแรกสำหรับ tara-frontend node

ครั้งที่สองสำหรับการเข้าถึงทรัพยากรที่ node <tara-X-XXX>

1.2. สำหรับระบบปฏิบัติการ Windows

ภาพหน้าจอ MobaXterm และจุดสังเกตของปุ่มที่กดเพื่อเข้าสู่หน้าจอ Terminal

สามารถเปิดใช้งาน local terminal บน MobaXterm ได้โดย click ที่ “Start local terminal” หรือ ปุ่มเครื่องหมาย “+” ด้านบน และใช้คำสั่งเช่นเดียวกับระบบปฏิบัติการ macOS หรือ Linux ด้านบน

$ ssh -J <username>@tara.nstda.or.th \ -L <local-port>:localhost:<application-port> \ -vN <username>@<tara-X-XXX>

ปัญหาที่อาจจะพบ

Troubleshooting

Error message

channel_setup_fwd_listener_tcpip: cannot listen to port: 8888

Could not request local forwarding.

วิธีแก้ไข

เปลี่ยนค่า <local-port> เป็นค่าอื่น เช่นเปลี่ยนจาก 8888 เป็น 8889 แทน

คำอธิบาย

ปัญหานี้เกิดจาก <local-port> ที่ user ระบุมีการใช้งานอยู่ในขณะเดียวกันนี้จาก application อื่น เช่น database, Jupyter Notebook, หรือ SSH เป็นต้น จึงไม่สามารถใช้งาน port ซ้อนทับในเวลาเดียวกันได้

2. เปิด application บน web browser จากเครื่อง local

  1. เปิด web browser จากนั้นระบุ url ดังนี้ http://localhost:<local-port>/<key>

  2. โดยระบุค่า <local-port> ตามที่ระบุในข้อ 1 และ <key> ระบุตาม application หรือไม่ระบุ

ในบาง application จะมีการใช้งาน token หรือ authentication key เพื่อจำกัดการเข้าถึง โดยทั่วไปแล้ว ค่าดังกล่าวจะอยู่ใน log file หรือแสดงบนหน้าจอ ซึ่งสามารถตรวจสอบได้ใน slurm-[job id].out โดยสามารถดูตัวอย่างการใช้งาน Jupyter Notebook ได้ที่ https://thaisc.atlassian.net/l/c/1juLqH79

 


ข้อมูลที่จำเป็นต้องใช้

ชื่อ HPC node ที่ application ใช้งานอยู่

  1. เรียกใช้คำสั่ง squeue ซึ่งจะแสดงผลลัพธ์ออกมาเป็นตาราง

  2. โดยสามารถดูชื่อ node ที่ application ได้จาก slurm และกำลังใช้งานอยู่ได้ใน column NODELIST(REASON)

application-port ที่ application ใช้งานอยู่

สามารถตรวจสอบจากค่าที่แสดงบนหน้าจอ (กรณีใช้ sinteract), log file, หรือ slurm-[job id].out ขึ้นอยู่กับ application โดยส่วนใหญ่จะพบใน slurm-[job id].out โดยจะแสดงค่า url ทีมีลักษณะดังนี้

http://localhost:3000/

http://127.0.0.1:38080/

http://localhost:8080/?token=48d6a6ccb7XXXXc45d611d79446691cee071fa4b1d72XXX

http://172.20.20.5:39094/?auth=x3vw8ryOeLqKT6otz5RiIXXXXhH4zi1llXXUvd6XXX

ซึ่งก็คือ

http://<IP address>:<application-port>/<key>

โดยที่ตัวอย่างด้านบนมี application-port คือ 3000, 38080, 8080 และ 39094 ตามลำดับ


Related articles