SSH Tunneling via Apache

1 Comment

อุปกรณ์ที่มี

  1. Apache web server ที่ติด mod_proxy และ mod_proxy_connect หรือ Web proxy server อะไรก็ได้ที่รองรับคำสั่ง CONNECT
  2. Proxytunnel
  3. SSH client

เริ่มจากตั้งค่าให้ Apache ก่อน โดยกำหนดให้ Apache เป็น Forward Proxy

<VirtualHost *:80>
  ServerName blah.com
 
  ProxyRequests On
  ProxyVia On
  AllowCONNECT 22 80 443 563
  <Proxy *>
    Order allow,deny
    Allow from all
  </Proxy>
</VirtualHost>
  • ProxyRequests เพื่อให้ Apache ทำตัวเป็น ForwardProxy เอา request เรียกไปที่เครื่องอื่นต่อได้
  • ProxyVia เพื่อให้ Apache แปะไปที่ request ที่เรียกต่อไปด้วยว่า เรียกผ่าน Proxy ที่ไหนมา
  • AllowCONNECT ไว้บอกว่าจะใช้คำสั้ง CONNECT ยิงไปที่ปลายทางได้ที่ port ไรบ้าง
  • <Proxy wildcard-url> เพื่อกำหนดขอบเขตของ Host ที่จะให้ใช้ Proxy นี้เรียกต่อได้

จากนั้นไปเอา Proxytunnel มาคอมไพล์และติดตั้ง (ถ้าเป็น Linux คาดว่าจะสามารถทำผ่าน repository ได้เลยมั้ง Windows ก็มี .exe ให้ เพราะงั้นสามารถใช้ได้หมด) ความสนุกที่เหลือคือ เรียกใช้คำสั่ง

ssh user@targethost -o ProxyCommand='proxytunnel -p proxy1:port -r proxy2:port -d %h:%p -H "User-Agent: Mozilla/4.0 ( compatible\; MSIE 6.0\; Win32 ) \n"'

สำหรับ -r จะใส่หรือไม่ใส่ก็ได้ แต่ใช้สำหรับกรณีที่ต้องใช้ Proxy มากกว่า 1 ที่ ส่วน targethost คือเครื่องภายในเครือข่ายที่อยู่ที่เดียวกับ proxy ปลายทางที่ใส่ไว้ใน -r (หรือ -p ถ้าไม่ได้ใส่ -r ไว้)

รู้สึกซับซ้อนมาก จริงๆ มี Option สำหรับ bind port หรือจะทำให้เป็น Sock Server อีกแต่จะใช้แล้วค่อยมาเขียนจดอีกที

Automatic ssh authenticate

Comments Off

วันนี้ willwill ถามในห้อง #ubuntu-th ว่าทำยังไงให้เข้าไปในเซิร์ฟเวอร์ได้โดยไม่ต้องพิมพ์รหัสผ่าน ก็คุ้นๆว่าเคยทำเมื่อปีที่แล้ว แต่ลืมไปแล้วค้นๆ ในบล๊อกก็เคยทำจริงด้วยแต่ไม่ได้เขียนวิธีไว้วันนี้เลยขุดค้นใหม่ (แต่ willwill เจอวิธีไปก่อนและ แต่คนละเว็บ) เอามาเขียนเก็บกันลืมในนี้อีกที

  1. ขั้นแรกล๊อกอินเข้าไปที่เซิร์ฟเวอร์ผ่าน ssh แล้วสร้าง key มาก่อนด้วยคำสั่งssh-keygen -t rsaโดยด้านหลังสุดอาจเป็น rsa หรือ dsa ก็ได้แล้วแต่วิธีที่จะใช้เข้ารหัส
  2. จากนั้นมันจะถามคำถามมามากมายรวมทั้งให้ใส่รหัสอีกทีรวมทั้งไฟล์ที่จะไว้เก็บ key นี้ด้วย สุดท้ายแล้วจะได้ไฟล์ออกมาสองไฟล์ คือไฟล์ที่เราใส่ชื่อเข้าไปกับ อีกอันที่มี .pub (คิดว่าเป็นไฟล์ที่เก็บ public key) ออกมา
  3. คัดลอกข้อมูลในไฟล์ .pub ลงไฟล์ ~/.ssh/authorized_keyscat host.pub >> ~/.ssh/authorized_keys
  4. เอาไฟล์ที่ได้ออกมาอีกไฟล์ส่งกลับมาที่เครื่องส่วนตัว แล้วเก็บไว้ที่ ~/.ssh เหมือนกัน ครั้งต่อไปที่เข้าเซิร์ฟเวอร์ก็ไม่ต้องใส่รหัสผ่านอีกต่อไปและ

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