ได้รับคำขอร้อง(จริงๆสั่งให้ทำ) ว่าให้หาช่องทางในการ Remote เข้าไปทำงานบน Network ของลูกค้า
โจทย์ไม่น่าจะยากเนอะ เหอะๆปัญหามีอยู่ว่า Network วงเนี้ยไม่มี Internet
สายเช่าก็แพงใช้ได้ จะต่อ ADSL เข้าไปก็มีปัญหาเรื่องสิทธิการใช้(พอติดต่อในนามบริษัทค่า ADSL พุ่งพรวด)
เฮือก... ทำไงดี ต่อผ่าน Mobile สิครับก็ไปได้ GPRS Router modem มาตัว 1
ถูกว่าค่าติดตั้ง สายเช่ากะ ADSL อีก ค่าเช่าสัญญาณก็ถูกว่า ติดตั้งก็ง่าย
แต่ว่ามัน SSH เข้าผ่าน GPRS ไม่ได้อีก เฮือก...
ไม่เป็นไร SSH มันเปิด Remote Forward port ได้ ก็นี่เลย
ssh -R 50022:127.0.0.1:22 Destination-IP-at-HQ
อ่ะเรียบร้อย... แต่เดี๋ยวก่อนถ้ามันหลุดล่ะ จะทำไง (โจทย์เยอะจังวุ้ย)
จำไว้ครับเราไม่ใช่คนแรก... Google ช่วยท่านได้
ผมไปนั่งค้นๆดูสักพักก็เจอ
rstunnel ( Reliable SSH Tunnel ) อืมๆท่าทางจะใช้ได้
แต่พอลองหาเพิ่มไปอีกหน่อย อะนี่เลย Inspire by rstunnel
AutoSSH พร้อมใช้ติดตั้งง่าย Function ครบครัน
มาลองดูกัน
AUTOSSH_POLL=600 #ให้ตรวจ tunnel ทุกๆ 5 นาที
AUTOSSH_PIDFILE=/var/run/autossh #File ที่เอาไว้เก็บ PID ของเจ้า AutoSSH มัน
export AUTOSSH_PIDFILE AUTOSSH_POLL #export ซะหน่อย
autossh -M 50000:50001 -f ssh -i private_key -R 50022:127.0.0.1:22 -l remote_user -N Destination-IP-at-HQ
# -M บอกว่า port ที่เอาไว้ให้ autossh ตรวจ tunnel
# -f สั่งให้ทำงานเป็น Daemon
# ssh -i private_key เป็น private key file ที่ไม่มี passphase สำหรับ remote_user
# -R 50022:127.0.0.1:22 ไปเปิด Remote port forward ที่ Head Quoter Office
# -l remote_user บอกให้ ssh ใช้ user remote_user (ผู้ใช้คนนี้มี shell=/bin/false)
# -N บอก ssh ให้ไม่ต้องรัน Shell เปิด tunnel อย่างเดียวพอ
ถ้าต้องการ restart ssh tunnel สั่ง
kill -s SIGUSR1 `cat /var/run/autossh`
ถ้าจะเลิกการทำงานของ autossh สั่ง
kill -s SIGTERM `cat /var/run/autossh`
ทีนี้ถ้า tunnel หลุดแต่ ssh session ยังอยู่ก็ไปสั่งคำสั่งนี้ที่ฝั่ง HQ
pkill -u remote_user sshd
กำลังลองใช้งานอยู่ครับ ทำงานได้ดีทีเดียว
Labels: autossh, linux failover, rstunnel, ssh, tunnel, work
Thursday, May 01, 2008 at 12:10