Tag: WSL

  • Windows Subsystem for Linux in Windows 10

    แนะนำวิธีติดตั้ง Windows Subsystem for Linux ใน Windows 10 รุ่น 1903 และวิธีเปิด sshd service อัตโนมัติ

    ขั้นตอน
    1.เปิด Featured Windows Subsystem for Linux ให้ไปที่ Control Panel เลือก Program เลือก Turn Windows features on or off ทำเครื่องหมายเพื่อเลือก Windows Subsystem for Linux รอสักครู่ จากนั้นจะมีคำสั่งให้ reboot เพื่อเริ่มใช้งานได้

    Open Control Panel
    Select Program
    Select Turn Windows features on or off
    Check Windows Subsystem for Linux
    Next, reboot Windows

    2.เปิด Microsoft Store App ใส่คำว่า ubuntu ในช่อง search เลือก Ubuntu 18.04 LTS App คลิก Get ถาม Sign in with Microsoft ให้ตอบ No, thanks จากนั้นรอ

    Open Microsoft Store
    Select Ubuntu 18.04 LTS App
    Get
    Answer with “No, thanks”
    On downloading

    3.เปิด Ubuntu 18.04 LTS ที่ปุ่ม Windows Start ให้คีย์คำว่า ubuntu แล้วเลือก Run ad administrator จะใช้เวลาสักครู่ แล้วจะให้เราตั้ง username และ password ที่ไม่จำเป็นต้องเหมือนกับ username ที่ sign in เข้า Windows

    Open Ubuntu with Run as administrator
    First time Installing

    4.เปิดอนุญาตให้มีการเชื่อมต่อผ่าน sshd ในครั้งแรกที่คีย์คำสั่งว่า
    sudo service ssh start

    Allow ssh in Windows Firewall

    5.ให้ถอนโปรแกรม openssh-server เพราะว่า Ubuntu ที่ได้มาไม่มี host key

    sudo apt remove openssh-server
    Remove sshd

    6.แล้วจะติดตั้งใหม่จะได้ ssh host key

    sudo apt install openssh-server
    Install sshd with new host key

    เปิด sshd service ด้วยคำสั่ง

    sudo service ssh start

    และทดสอบว่า บริการ sshd ทำงานได้แล้วด้วยคำสั่ง

    ssh john@127.0.0.1

    ให้เปลี่ยนคำว่า john เป็นชื่อ username ที่ใช้งาน
    จะพบว่าครั้งแรกนี้ จะเข้าไม่ได้ Permission denied (publickey)

    Permission denied

    7.เราจะตั้งค่าให้ใช้ password ได้ด้วยนอกจากใช้ public key

    sudo sed -i "s/^PasswordAuthentication no/PasswordAuthentication yes/" /etc/ssh/sshd_config
    Allow using password

    เปิด sshd service อีกครั้ง ด้วยคำสั่ง
    sudo service ssh restart
    และทดสอบอีกครั้งว่า บริการ sshd ทำงานได้แล้วด้วยคำสั่ง
    ssh john@127.0.0.1
    ให้เปลี่ยนคำว่า john เป็นชื่อ username ที่ใช้งาน
    ในรอบนี้ เราจะใส่ password ได้แล้ว หลังจากสำเร็จ ก็ใช้คำสั่ง exit ออกมา

    sshd is OK

    เมื่อมาถึงตรงนี้ เราได้ทำให้บริการ sshd พร้อมใช้งานใน Windows ของเราแล้ว

    ต่อไปเป็นการตั้งค่าให้บริการ sshd ทำงานทันทีที่เปิด Windows
    คีย์คำสั่งเหล่านี้

    echo "sudo /usr/sbin/service ssh start" > /mnt/c/startssh.sh

    และ

    echo "%sudo ALL = NOPASSWD: /usr/sbin/service ssh start" | sudo tee /etc/sudoers.d/custom

    (ตรงนี้อาจมีถาม password ของ username ที่กำลังใช้งานที่มีสิทธิใช้คำสั่ง sudo)
    และคำสั่งนี้

    sudo chmod 0440 /etc/sudoers.d/custom

    เสร็จแล้วคีย์คำสั่ง exit เพื่อปิดหน้าต่าง

    To prepare a task for Task Schdule

    คำเตือน: หากคีย์ข้อความในคำสั่งตกหล่น จะต้องกลับไปติดตั้ง Ubuntu ใหม่โดยการ Uninstall แล้ว Install ใหม่

    เราจะไปตั้งค่าให้ startssh.sh ทำงานด้วย Task Schedule
    เปิด Task Scheduler เลือก Run as administrator เลือก Task Scheduler Library ดูด้านขวา เลือกคำสั่ง Create Task

    Open Task Schedule
    Select Create Task

    แท็บแรกคือ General ตั้ง Name ว่า startssh เลือก Run whether user is logged on or not เลือก Run with highest privileges ที่ช่อง Configure for เลือก Windows 10

    General Tab

    แท็บสองคือ triggers เลือก New ที่ช่อง Begin the task เลือก At startup ที่ช่อง Advanced Settings ด้านล่าง เลือก Enabled

    Triggers Tab

    แท็บสามคือ Actions เลือก New ที่ช่อง Action เลือก Start a program ที่ช่อง Program/script ใส่คำว่า bash และที่ช่อง Add arguments ใส่ข้อความ /mnt/c/startssh.sh

    Action Tab

    จะมี pop up window ถาม username กับ password ที่จะรัน Task นี้ ก็ใส่ให้ถูก แล้วปิดหน้าต่าง Task Schedule

    Enter password

    เมื่อมาถึงตรงนี้ เราก็ได้ตั้งค่าให้ Start sshd เมื่อ Windows Start เสร็จแล้ว

    ทดสอบโดยการ reboot Windows เพื่อดูว่า Task Schedule ทำ task ขื่อ startssh ให้อัตโนมัติสำเร็จหรือไม่ โดยการทดสอบ ssh เข้าจาก PC อีกเครื่อง สมมติว่า เครื่อง Windows มี IP 192.168.6.221

    ssh john@192.168.6.221

    หลังจากตอบ Yes แล้วใส่ password ผ่าน ก็ให้พิมพ์คำสั่ง exit เป็นอันเสร็จสิ้นการทดสอบ
    หากได้ข้อความประมาณว่า ssh: connect to host 192.168.6.221 port 22: Resource temporarily unavailable ก็ต้องกลับไปตรวจสอบว่า ทำไมจึงเปิดบริการ sshd ไม่สำเร็จ ลองเช็ค Windows Firewall

    ต่อไปเป็นการนำ ssh key (id_rsa.pub) จากเครื่อง server ไปฝากไว้ที่ Windows Subsystem for Linux เพื่อเป็น publickey ใช้แทนการใส่ password เมื่อเราจะส่งคำสั่งเข้าไปจัดการ Windows ผ่านทาง Windows Subsystem for Linux เช่น reboot Windows เป็นต้น

    ตรวจสอบที่ server จะต้องมีไฟล์ id_rsa.pub ใน ~/.ssh/ ถ้ายังไม่ได้สร้าง key ก็ให้ใช้คำสั่งนี้

    ssh-keygen -t rsa
    directory ~/.ssh

    ส่ง ssh key ด้วยคำสั่งนี้

    ssh-copy-id -i ~/.ssh/id_rsa.pub john@192.168.6.221

    ให้แทนที่ john ด้วย username ที่ใช้ และเปลี่ยน IP เป็นที่ใช้

    Send ssh key

    ถ้าทำสำเร็จ ทดสอบด้วยคำสั่ง ssh john@192.168.6.221 จะเข้าได้โดยไม่มีถาม password
    ให้ออกจาก ssh นั้นด้วยคำสั่ง exit

    Testing

    ขั้นสุดท้ายทดสอบสั่ง reboot Windows ด้วยคำสั่ง เขียนติดกันเป็นบรรทัดเดียว

    ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no john@192.168.6.221 "/mnt/c/Windows/system32/shutdown.exe -r -f -t 0"
    Now we can manage Windows from remote

    วิธีที่ได้นำเสนอนี้ จะนำไปเป็นส่วนหนึ่งในการควบคุม Windows PC ในห้องบริการคอมพิวเตอร์ ซึ่งเราจะประยุกต์ให้เป็นการติดตั้งผ่าน shell script ไม่ต้องคีย์ทีละคำสั่ง