การตั้งค่าเครื่องมือ VPN: สภาพแวดล้อมตอนเริ่มหรือการส่งออกในฮุก?
ฮุกเริ่มโพรเซสลูกของตัวเอง ไม่ใช่เชลล์ที่คุณเปิดไว้แล้ว สภาพแวดล้อมตอนเริ่มเก็บปลายทางส่วนตัวไว้ในคำสั่งเดียวที่ต้องการมันเท่านั้น
ฮุก VPN ที่ส่งออกปลายทาง API เปลี่ยนสภาพแวดล้อมของโพรเซสที่มันเริ่ม ไม่ใช่ของเทอร์มินัลที่เปิดอยู่แล้วตอนที่อุโมงค์ขึ้น ความต่างข้อเดียวนี้คือคำอธิบายของรายงาน «เครื่องมือยังเรียกปลายทางสาธารณะอยู่» ส่วนใหญ่ มีสองตำแหน่งที่ใช้งานได้สำหรับการตั้งค่านี้ และการเลือกขึ้นอยู่กับว่าใครใช้มันและมันเปลี่ยนบ่อยแค่ไหน เปรียบเทียบทั้งสองก่อนที่คุณจะเพิ่มสคริปต์เริ่มทำงานอีกตัว
สองตำแหน่งที่การตั้งค่าอาศัยอยู่ได้
ตัวเลือกแรกคือคำนำหน้าบนคำสั่งเอง ค่าจะมีอยู่เฉพาะการเรียกครั้งนั้นและหายไปพร้อมกับมัน ตัวเลือกที่สองคือการส่งออกภายในฮุกเชื่อมต่อ ซึ่งเข้าถึงทุกโพรเซสที่ฮุกเริ่มหลังจากจุดนั้น ทั้งสองต่างกันที่ขอบเขตและอายุการใช้งาน ไม่ใช่ไวยากรณ์ และความต่างนั้นเป็นตัวตัดสินความล้มเหลวส่วนใหญ่
| Property | Prefix on the command | Export from the hook |
|---|---|---|
| Who receives it | That invocation only | Children the hook starts |
| Lifetime | Until the process exits | Until the hook's own session ends |
| Leakage | Scoped to one command | Applies to later commands in that session |
| Repeat cost | Every invocation | Once per connection |
| Works for an open editor | No, unless the editor is started with it | No |
ตารางทำให้ฮุกดูถูกและซ่อนบิลจริง มันยังเลือกปลายทางส่วนตัวให้คำสั่งที่ไม่เกี่ยวกับงานด้วย อ่านแต่ละแถวเป็นข้อจำกัด ไม่ใช่ความชอบ ถ้าปลายทางเปลี่ยนตามงาน คำนำหน้าชนะด้านความแม่นยำแม้ต้องเสียการกดปุ่มหนึ่งครั้ง
ทำไมฮุกจึงเข้าถึงเชลล์ที่เปิดอยู่แล้วไม่ได้
ตัวแปรสภาพแวดล้อมถูกส่งให้โพรเซสเมื่ออิมเมจของโพรเซสถูกสร้าง เชลล์ที่เริ่มก่อนการเชื่อมต่อยังเก็บสำเนาที่ได้รับไว้ และการส่งออกที่ทำในฮุกไม่ใช่การกระจายไปยังทุกโพรเซสในเครื่อง มีเพียงลูกของฮุกเองเท่านั้นที่สืบทอดมัน ลูกของเชลล์เองรับสิ่งที่เชลล์ถืออยู่ในขณะที่พวกมันเริ่มต้น นี่คือเหตุผลที่คำสั่งเดียวกันอาจทำงานในเทอร์มินัลหนึ่งและล้มเหลวในอีกอัน
เช่นเดียวกันกับเอดิเตอร์แบบกราฟิก โฮสต์ส่วนขยาย เทอร์มินัลในตัว และเซิร์ฟเวอร์ภาษาพื้นหลังถูกแยกออกตอนเริ่มและถือสำเนาของตัวเอง การเปิดโฟลเดอร์อีกครั้งไม่จำเป็นต้องรีสตาร์ทโพรเซสลูกเหล่านั้น ดังนั้นการตั้งค่าที่คุณเพิ่มจึงยังไม่ถึงอยู่ดี
การทดสอบที่ถูกที่สุดคือพิมพ์ตัวแปรจากจุดที่ล้มเหลว ไม่ใช่จากเชลล์ที่ทำงานได้ ถ้าโพรเซสที่ล้มเหลวเริ่มก่อนอุโมงค์ การส่งออกก็ไม่เคยมีโอกาส
รูปแบบต่อคำสั่ง เขียนออกมา
คำนำหน้าทำให้ตัวเลือกมองเห็นได้ในคำสั่งที่ใช้มัน ซึ่งช่วยเมื่อปลายทางเปลี่ยนระหว่างงาน
env INTERNAL_API='https://internal-api.example.net:8443' my-work-tool
คำสั่งนี้เป็นเพียงตัวอย่าง my-work-tool เป็นตัวแทน และ INTERNAL_API ไม่ใช่มาตรฐาน VPN ดังนั้นให้แทนที่ด้วยการตั้งค่าที่มีเอกสารของโปรแกรมที่คุณรันจริงและโฮสต์ที่ได้รับอนุมัติของคุณ อย่าใส่โทเคนหรือรหัสผ่านในบรรทัดเดียวกัน เพราะมันจะไปอยู่ในประวัติของเชลล์
เมื่อหลายคำสั่งเป็นของงานเดียว สคริปต์ห่อหุ้มสั้น ๆ ที่ตรวจทานแล้วจะตั้งตัวแปรแล้วจึงเริ่มคำสั่งเหล่านั้น วิธีนี้คงนิยามไว้เพียงชุดเดียวโดยไม่ทำให้ค่าเป็นสากลสำหรับทุกคำสั่งในอนาคตของเทอร์มินัล
โหลดใหม่ รีสตาร์ท หรือปล่อยไว้
สำหรับเครื่องมือที่ทำงานอยู่แล้ว ให้เลือกการโหลดใหม่หรือโปรไฟล์เวิร์กสเปซของมันเองถ้ามี มิฉะนั้นให้บันทึกงานแล้วรีสตาร์ทส่วนประกอบที่อ่านการตั้งค่า ซึ่งมักเป็นเซิร์ฟเวอร์ภาษาไม่ใช่หน้าต่างเอดิเตอร์ การรีสตาร์ทหน้าต่างแล้วถือว่าโพรเซสลูกตามมาแล้วคือเหตุผลที่การโหลดใหม่ดูเหมือนไม่ทำงาน
การตัดการเชื่อมต่อเป็นการตัดสินใจแยกต่างหาก การหยุดชั่วคราว การปิด หรือการเชื่อมต่อใหม่เป็นเรื่องของแอปพลิเคชัน และตัวแปรปลายทางไม่ได้ควบคุมมัน มองตัวแปรเป็นการกำหนดค่าที่เลือกที่อยู่ ไม่ใช่กฎเกี่ยวกับทราฟฟิกเครือข่ายที่ใช้ได้หลังจากนั้น และทั้งสองเรื่องยังแยกจากกันได้