เคล็ดลับการปฏิบัติ ตัวอย่าง และอุโมงค์ SSH

เคล็ดลับการปฏิบัติ ตัวอย่าง และอุโมงค์ SSH
ตัวอย่างการปฏิบัติ SSHซึ่งจะนำทักษะของคุณในฐานะผู้ดูแลระบบระยะไกลไปสู่อีกระดับ คำสั่งและคำแนะนำไม่เพียงแต่จะช่วยในการใช้งานเท่านั้น SSHแต่ยังนำทางเครือข่ายได้อย่างเชี่ยวชาญยิ่งขึ้น

รู้เคล็ดลับเล็กน้อย ssh มีประโยชน์สำหรับผู้ดูแลระบบ วิศวกรเครือข่าย หรือผู้เชี่ยวชาญด้านความปลอดภัย

ตัวอย่าง SSH ที่ใช้งานได้จริง

  1. พร็อกซีถุงเท้า SSH
  2. อุโมงค์ SSH (การส่งต่อพอร์ต)
  3. อุโมงค์ SSH ไปยังโฮสต์ที่สาม
  4. อุโมงค์ SSH ย้อนกลับ
  5. พร็อกซีย้อนกลับ SSH
  6. การติดตั้ง VPN ผ่าน SSH
  7. การคัดลอกคีย์ SSH (ssh-copy-id)
  8. การดำเนินการคำสั่งระยะไกล (ไม่โต้ตอบ)
  9. การจับและดูแพ็กเก็ตระยะไกลใน Wireshark
  10. การคัดลอกโฟลเดอร์ในเครื่องไปยังเซิร์ฟเวอร์ระยะไกลผ่าน SSH
  11. แอปพลิเคชัน GUI ระยะไกลพร้อมการส่งต่อ SSH X11
  12. การคัดลอกไฟล์ระยะไกลโดยใช้ rsync และ SSH
  13. SSH ผ่านเครือข่าย Tor
  14. อินสแตนซ์ SSH ถึง EC2
  15. การแก้ไขไฟล์ข้อความโดยใช้ VIM ผ่าน ssh/scp
  16. เมานต์ SSH ระยะไกลเป็นโฟลเดอร์ในเครื่องด้วย SSHFS
  17. มัลติเพล็กซ์ SSH ด้วย ControlPath
  18. สตรีมวิดีโอผ่าน SSH โดยใช้ VLC และ SFTP
  19. การรับรองความถูกต้องด้วยสองปัจจัย
  20. กระโดดโฮสต์ด้วย SSH และ -J
  21. การบล็อกความพยายามแบบเดรัจฉาน SSH โดยใช้ iptables
  22. SSH Escape เพื่อเปลี่ยนการส่งต่อพอร์ต

พื้นฐานก่อน

การแยกวิเคราะห์บรรทัดคำสั่ง SSH

ตัวอย่างต่อไปนี้ใช้พารามิเตอร์ทั่วไปที่มักพบเมื่อเชื่อมต่อกับเซิร์ฟเวอร์ระยะไกล SSH.

localhost:~$ ssh -v -p 22 -C neo@remoteserver

  • -v: เอาต์พุตการแก้ไขจุดบกพร่องมีประโยชน์อย่างยิ่งเมื่อวิเคราะห์ปัญหาการรับรองความถูกต้อง สามารถใช้หลายครั้งเพื่อแสดงข้อมูลเพิ่มเติม
  • - p 22: พอร์ตการเชื่อมต่อ ไปยังเซิร์ฟเวอร์ SSH ระยะไกล ไม่จำเป็นต้องระบุ 22 เนื่องจากเป็นค่าเริ่มต้น แต่หากโปรโตคอลอยู่บนพอร์ตอื่นเราจะระบุโดยใช้พารามิเตอร์ -p. พอร์ตการฟังถูกระบุไว้ในไฟล์ sshd_config ในรูปแบบ Port 2222.
  • -C: การบีบอัดสำหรับการเชื่อมต่อ หากคุณมีการเชื่อมต่อที่ช้าหรือดูข้อความจำนวนมาก สิ่งนี้สามารถเร่งความเร็วการเชื่อมต่อได้
  • neo@: บรรทัดก่อนสัญลักษณ์ @ ระบุชื่อผู้ใช้สำหรับการรับรองความถูกต้องบนเซิร์ฟเวอร์ระยะไกล หากคุณไม่ระบุ ระบบจะใช้ชื่อผู้ใช้ของบัญชีที่คุณเข้าสู่ระบบอยู่ในปัจจุบัน (~$whoami) ผู้ใช้ยังสามารถระบุได้โดยใช้พารามิเตอร์ -l.
  • remoteserver: ชื่อของโฮสต์ที่จะเชื่อมต่อ sshซึ่งอาจเป็นชื่อโดเมนแบบเต็ม ที่อยู่ IP หรือโฮสต์ใดๆ ในไฟล์โฮสต์ภายในเครื่อง หากต้องการเชื่อมต่อกับโฮสต์ที่รองรับทั้ง IPv4 และ IPv6 คุณสามารถเพิ่มพารามิเตอร์ลงในบรรทัดคำสั่งได้ -4 หรือ -6 เพื่อความละเอียดที่เหมาะสม

พารามิเตอร์ข้างต้นทั้งหมดเป็นทางเลือก ยกเว้น remoteserver.

การใช้ไฟล์กำหนดค่า

แม้ว่าหลายคนจะคุ้นเคยกับไฟล์นี้ก็ตาม sshd_configนอกจากนี้ยังมีไฟล์คอนฟิกูเรชันไคลเอ็นต์สำหรับคำสั่งอีกด้วย ssh. ค่าเริ่มต้น ~/.ssh/configแต่สามารถกำหนดเป็นพารามิเตอร์สำหรับตัวเลือกได้ -F.

Host *
     Port 2222

Host remoteserver
     HostName remoteserver.thematrix.io
     User neo
     Port 2112
     IdentityFile /home/test/.ssh/remoteserver.private_key

มีรายการโฮสต์สองรายการในไฟล์การกำหนดค่า ssh ตัวอย่างด้านบน อันแรกหมายถึงโฮสต์ทั้งหมดทั้งหมดใช้พารามิเตอร์การกำหนดค่าพอร์ต 2222 อันที่สองบอกว่าสำหรับโฮสต์ เซิร์ฟเวอร์ระยะไกล ควรใช้ชื่อผู้ใช้ พอร์ต FQDN และ IdentityFile อื่น

ไฟล์การกำหนดค่าสามารถประหยัดเวลาในการพิมพ์ได้มากโดยอนุญาตให้ใช้การกำหนดค่าขั้นสูงโดยอัตโนมัติเมื่อเชื่อมต่อกับโฮสต์ที่ระบุ

คัดลอกไฟล์ผ่าน SSH โดยใช้ SCP

ไคลเอนต์ SSH มาพร้อมกับเครื่องมือที่มีประโยชน์อีกสองเครื่องมือสำหรับการคัดลอกไฟล์ การเชื่อมต่อ ssh ที่เข้ารหัส. ดูด้านล่างสำหรับตัวอย่างการใช้งานมาตรฐานของคำสั่ง scp และ sftp โปรดทราบว่าตัวเลือก ssh จำนวนมากใช้ได้กับคำสั่งเหล่านี้เช่นกัน

localhost:~$ scp mypic.png neo@remoteserver:/media/data/mypic_2.png

ในตัวอย่างนี้ไฟล์ mypic.png คัดลอกไปที่ เซิร์ฟเวอร์ระยะไกล ไปยังโฟลเดอร์ /สื่อ/ข้อมูล และเปลี่ยนชื่อเป็น mypic_2.png.

อย่าลืมเกี่ยวกับความแตกต่างในพารามิเตอร์พอร์ต นี่คือจุดที่ผู้คนจำนวนมากถูกจับได้เมื่อเปิดตัว scp จากบรรทัดคำสั่ง นี่คือพารามิเตอร์พอร์ต -Pและไม่ -pเช่นเดียวกับในไคลเอนต์ ssh! คุณจะลืม แต่ไม่ต้องกังวล ทุกคนจะลืม

สำหรับผู้ที่คุ้นเคยกับคอนโซล ftpคำสั่งหลายคำสั่งก็คล้ายกัน sftp. คุณทำได้ ดัน, ใส่ и lsตามที่ใจปรารถนา

sftp neo@remoteserver

ตัวอย่างการปฏิบัติ

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

1. พร็อกซีถุงเท้า SSH

คุณสมบัติ SSH Proxy เป็นอันดับ 1 ด้วยเหตุผลที่ดี มันมีประสิทธิภาพมากกว่าที่หลาย ๆ คนรู้และให้คุณเข้าถึงระบบใด ๆ ที่เซิร์ฟเวอร์ระยะไกลสามารถเข้าถึงได้โดยใช้แอปพลิเคชันแทบทุกชนิด ไคลเอนต์ ssh สามารถส่งสัญญาณการรับส่งข้อมูลผ่านพร็อกซี SOCKS ด้วยคำสั่งง่ายๆ เพียงคำสั่งเดียว สิ่งสำคัญคือต้องเข้าใจว่าการรับส่งข้อมูลไปยังระบบระยะไกลจะมาจากเซิร์ฟเวอร์ระยะไกล ซึ่งจะระบุไว้ในบันทึกของเว็บเซิร์ฟเวอร์

localhost:~$ ssh -D 8888 user@remoteserver

localhost:~$ netstat -pan | grep 8888
tcp        0      0 127.0.0.1:8888       0.0.0.0:*               LISTEN      23880/ssh

ที่นี่เราเรียกใช้พร็อกซีถุงเท้าบนพอร์ต TCP 8888 คำสั่งที่สองจะตรวจสอบว่าพอร์ตทำงานในโหมดการฟังหรือไม่ 127.0.0.1 ระบุว่าบริการทำงานบน localhost เท่านั้น เราสามารถใช้คำสั่งที่แตกต่างกันเล็กน้อยเพื่อฟังบนอินเทอร์เฟซทั้งหมด รวมถึงอีเธอร์เน็ตหรือ wifi ซึ่งจะช่วยให้แอปพลิเคชันอื่น (เบราว์เซอร์ ฯลฯ ) บนเครือข่ายของเราเชื่อมต่อกับบริการพร็อกซีผ่านพร็อกซีถุงเท้า ssh

localhost:~$ ssh -D 0.0.0.0:8888 user@remoteserver

ตอนนี้เราสามารถกำหนดค่าเบราว์เซอร์ให้เชื่อมต่อกับพร็อกซีถุงเท้าได้ ใน Firefox ให้เลือก การตั้งค่า | พื้นฐาน | การตั้งค่าเครือข่าย. ระบุที่อยู่ IP และพอร์ตที่จะเชื่อมต่อ

เคล็ดลับการปฏิบัติ ตัวอย่าง และอุโมงค์ SSH

โปรดทราบว่าตัวเลือกที่ด้านล่างของแบบฟอร์มเพื่อให้คำขอ DNS ของเบราว์เซอร์ของคุณผ่านพร็อกซี SOCKS ด้วย หากคุณใช้พร็อกซีเซิร์ฟเวอร์เพื่อเข้ารหัสการรับส่งข้อมูลเว็บบนเครือข่ายท้องถิ่นของคุณ คุณอาจต้องการเลือกตัวเลือกนี้เพื่อให้คำขอ DNS ถูกส่งผ่านช่องทางการเชื่อมต่อ SSH

กำลังเปิดใช้งานพร็อกซีถุงเท้าใน Chrome

การเปิด Chrome ด้วยพารามิเตอร์บรรทัดคำสั่งบางอย่างจะเปิดใช้งานพร็อกซีถุงเท้า เช่นเดียวกับการส่งคำขอ DNS จากเบราว์เซอร์ เชื่อแต่เช็ค.. ใช้ tcpdump เพื่อตรวจสอบว่าการสืบค้น DNS ไม่สามารถมองเห็นได้อีกต่อไป

localhost:~$ google-chrome --proxy-server="socks5://192.168.1.10:8888"

การใช้แอปพลิเคชันอื่นกับพรอกซี

โปรดทราบว่าแอปพลิเคชันอื่นๆ จำนวนมากอาจใช้พร็อกซีถุงเท้าด้วย เว็บเบราว์เซอร์เป็นเว็บที่ได้รับความนิยมมากที่สุด แอปพลิเคชั่นบางตัวมีตัวเลือกการกำหนดค่าเพื่อเปิดใช้งานพร็อกซีเซิร์ฟเวอร์ คนอื่นๆ ต้องการความช่วยเหลือเล็กน้อยเกี่ยวกับโปรแกรมตัวช่วย ตัวอย่างเช่น, พร็อกซีเชน ช่วยให้คุณสามารถเรียกใช้ผ่านพร็อกซีถุงเท้า Microsoft RDP ฯลฯ

localhost:~$ proxychains rdesktop $RemoteWindowsServer

พารามิเตอร์การกำหนดค่าพร็อกซีถุงเท้าถูกตั้งค่าไว้ในไฟล์การกำหนดค่าพร็อกซีเชน

คำแนะนำ: หากคุณใช้เดสก์ท็อประยะไกลจาก Linux บน Windows ลองลูกค้า ฟรี RDP. นี่เป็นการดำเนินการที่ทันสมัยกว่า rdesktopด้วยประสบการณ์ที่ราบรื่นยิ่งขึ้น

ตัวเลือกในการใช้ SSH ผ่านพร็อกซีถุงเท้า

คุณกำลังนั่งอยู่ในร้านกาแฟหรือโรงแรม - และถูกบังคับให้ใช้ WiFi ที่ไม่น่าเชื่อถือ เราเปิดตัวพร็อกซี ssh ในเครื่องจากแล็ปท็อป และติดตั้งอุโมงค์ ssh ลงในเครือข่ายในบ้านบน Rasberry Pi ในพื้นที่ การใช้เบราว์เซอร์หรือแอปพลิเคชันอื่นที่กำหนดค่าสำหรับพร็อกซีถุงเท้า เราสามารถเข้าถึงบริการเครือข่ายใด ๆ บนเครือข่ายในบ้านของเราหรือเข้าถึงอินเทอร์เน็ตผ่านการเชื่อมต่อที่บ้านของเรา ทุกอย่างระหว่างแล็ปท็อปและโฮมเซิร์ฟเวอร์ของคุณ (ผ่าน Wi-Fi และอินเทอร์เน็ตไปยังบ้านของคุณ) จะถูกเข้ารหัสในอุโมงค์ SSH

2. อุโมงค์ SSH (การส่งต่อพอร์ต)

ในรูปแบบที่ง่ายที่สุด อุโมงค์ SSH เพียงเปิดพอร์ตบนระบบภายในเครื่องของคุณที่เชื่อมต่อกับพอร์ตอื่นที่ปลายอีกด้านของอุโมงค์

localhost:~$ ssh  -L 9999:127.0.0.1:80 user@remoteserver

ลองดูที่พารามิเตอร์ -L. ถือได้ว่าเป็นด้านของการฟังในท้องถิ่น ในตัวอย่างข้างต้น พอร์ต 9999 กำลังรับฟังจากฝั่งโลคัลโฮสต์และส่งต่อผ่านพอร์ต 80 ไปยังเซิร์ฟเวอร์ระยะไกล โปรดทราบว่า 127.0.0.1 หมายถึง localhost บนเซิร์ฟเวอร์ระยะไกล!

ขึ้นขั้นกันเลย ตัวอย่างต่อไปนี้สื่อสารพอร์ตการฟังกับโฮสต์อื่นบนเครือข่ายท้องถิ่น

localhost:~$ ssh  -L 0.0.0.0:9999:127.0.0.1:80 user@remoteserver

ในตัวอย่างเหล่านี้ เรากำลังเชื่อมต่อกับพอร์ตบนเว็บเซิร์ฟเวอร์ แต่อาจเป็นพร็อกซีเซิร์ฟเวอร์หรือบริการ TCP อื่นๆ

3. ช่องสัญญาณ SSH ไปยังโฮสต์บุคคลที่สาม

เราสามารถใช้พารามิเตอร์เดียวกันในการเชื่อมต่อทันเนลจากเซิร์ฟเวอร์ระยะไกลไปยังบริการอื่นที่ทำงานบนระบบที่สาม

localhost:~$ ssh  -L 0.0.0.0:9999:10.10.10.10:80 user@remoteserver

ในตัวอย่างนี้ เรากำลังเปลี่ยนเส้นทางช่องสัญญาณจากเซิร์ฟเวอร์ระยะไกลไปยังเว็บเซิร์ฟเวอร์ที่ทำงานบน 10.10.10.10 การรับส่งข้อมูลจากเซิร์ฟเวอร์ระยะไกลถึง 10.10.10.10 ไม่อยู่ในอุโมงค์ SSH อีกต่อไป. เว็บเซิร์ฟเวอร์บน 10.10.10.10 จะถือว่าเซิร์ฟเวอร์ระยะไกลเป็นแหล่งที่มาของคำขอเว็บ

4. อุโมงค์ SSH ย้อนกลับ

ที่นี่เราจะกำหนดค่าพอร์ตการฟังบนเซิร์ฟเวอร์ระยะไกลที่จะเชื่อมต่อกลับไปยังพอร์ตในเครื่องบนโลคัลโฮสต์ของเรา (หรือระบบอื่น ๆ )

localhost:~$ ssh -v -R 0.0.0.0:1999:127.0.0.1:902 192.168.1.100 user@remoteserver

เซสชัน SSH นี้สร้างการเชื่อมต่อจากพอร์ต 1999 บนเซิร์ฟเวอร์ระยะไกลไปยังพอร์ต 902 บนไคลเอนต์ในเครื่องของเรา

5. พร็อกซีย้อนกลับ SSH

ในกรณีนี้ เรากำลังตั้งค่าพร็อกซีถุงเท้าบนการเชื่อมต่อ ssh ของเรา แต่พร็อกซีกำลังฟังจากระยะไกลของเซิร์ฟเวอร์ การเชื่อมต่อกับพร็อกซีระยะไกลนี้ปรากฏจากอุโมงค์เป็นการรับส่งข้อมูลจากโลคัลโฮสต์ของเรา

localhost:~$ ssh -v -R 0.0.0.0:1999 192.168.1.100 user@remoteserver

การแก้ไขปัญหาเกี่ยวกับอุโมงค์ SSH ระยะไกล

หากคุณมีปัญหากับตัวเลือก SSH ระยะไกลที่ใช้งานได้ ให้ตรวจสอบกับ netstatอินเทอร์เฟซอื่นใดที่พอร์ตการฟังเชื่อมต่ออยู่ แม้ว่าเราจะระบุ 0.0.0.0 ในตัวอย่าง แต่ถ้าเป็นค่า เกตเวย์พอร์ต в sshd_config ตั้งค่าให้ ไม่จากนั้นผู้ฟังจะถูกผูกไว้กับ localhost เท่านั้น (127.0.0.1)

คำเตือนด้านความปลอดภัย

โปรดทราบว่าการเปิดอุโมงค์และพร็อกซีถุงเท้า ทรัพยากรเครือข่ายภายในอาจสามารถเข้าถึงได้โดยเครือข่ายที่ไม่น่าเชื่อถือ (เช่น อินเทอร์เน็ต!) นี่อาจเป็นความเสี่ยงด้านความปลอดภัยอย่างร้ายแรง ดังนั้นโปรดแน่ใจว่าคุณเข้าใจว่าผู้ฟังคืออะไรและพวกเขาเข้าถึงอะไรได้

6. การติดตั้ง VPN ผ่าน SSH

คำทั่วไปในหมู่ผู้เชี่ยวชาญในด้านวิธีการโจมตี (เพนเทสเตอร์ ฯลฯ) คือ “จุดศูนย์กลางในเครือข่าย” เมื่อสร้างการเชื่อมต่อบนระบบหนึ่งแล้ว ระบบนั้นจะกลายเป็นเกตเวย์สำหรับการเข้าถึงเครือข่ายเพิ่มเติม จุดศูนย์กลางที่ช่วยให้คุณเคลื่อนไหวได้กว้าง

สำหรับการตั้งหลักดังกล่าวเราสามารถใช้พร็อกซี SSH และ พร็อกซีเชนแต่มีข้อจำกัดบางประการ เช่นจะไม่สามารถทำงานโดยตรงกับซ็อกเก็ตได้ ดังนั้น เราจะไม่สามารถสแกนพอร์ตภายในเครือข่ายผ่านทาง nmap SYN.

การใช้ตัวเลือก VPN ขั้นสูงกว่านี้ การเชื่อมต่อจะลดลงเหลือ ระดับ 3. จากนั้นเราก็สามารถกำหนดเส้นทางการรับส่งข้อมูลผ่านอุโมงค์โดยใช้การกำหนดเส้นทางเครือข่ายมาตรฐาน

วิธีการใช้ ssh, iptables, tun interfaces และการกำหนดเส้นทาง

ก่อนอื่นคุณต้องตั้งค่าพารามิเตอร์เหล่านี้ก่อน sshd_config. เนื่องจากเรากำลังทำการเปลี่ยนแปลงอินเทอร์เฟซของทั้งระบบระยะไกลและระบบไคลเอ็นต์ เราจึงได้ ต้องการสิทธิ์รูททั้งสองด้าน.

PermitRootLogin yes
PermitTunnel yes

จากนั้นเราจะสร้างการเชื่อมต่อ ssh โดยใช้พารามิเตอร์ที่ร้องขอการเริ่มต้นอุปกรณ์จูน

localhost:~# ssh -v -w any root@remoteserver

ตอนนี้เราควรมีอุปกรณ์ปรับแต่งเมื่อแสดงอินเทอร์เฟซ (# ip a). ขั้นตอนต่อไปจะเพิ่มที่อยู่ IP ให้กับอินเทอร์เฟซทันเนล

ฝั่งไคลเอ็นต์ SSH:

localhost:~# ip addr add 10.10.10.2/32 peer 10.10.10.10 dev tun0
localhost:~# ip tun0 up

ฝั่งเซิร์ฟเวอร์ SSH:

remoteserver:~# ip addr add 10.10.10.10/32 peer 10.10.10.2 dev tun0
remoteserver:~# ip tun0 up

ตอนนี้เรามีเส้นทางตรงไปยังโฮสต์อื่น (route -n и ping 10.10.10.10).

คุณสามารถกำหนดเส้นทางซับเน็ตใดๆ ผ่านโฮสต์ที่อยู่อีกฝั่งหนึ่งได้

localhost:~# route add -net 10.10.10.0 netmask 255.255.255.0 dev tun0

ในด้านระยะไกลคุณต้องเปิดใช้งาน ip_forward и iptables.

remoteserver:~# echo 1 > /proc/sys/net/ipv4/ip_forward
remoteserver:~# iptables -t nat -A POSTROUTING -s 10.10.10.2 -o enp7s0 -j MASQUERADE

บูม! VPN ผ่านอุโมงค์ SSH ที่เครือข่ายเลเยอร์ 3. ตอนนี้เป็นชัยชนะแล้ว

หากเกิดปัญหาใดๆ ให้ใช้ tcpdump и pingเพื่อระบุสาเหตุ เนื่องจากเรากำลังเล่นที่เลเยอร์ 3 แพ็กเก็ต icmp ของเราจะผ่านอุโมงค์นี้

7. คัดลอกคีย์ SSH (ssh-copy-id)

มีหลายวิธีในการทำเช่นนี้ แต่คำสั่งนี้ช่วยประหยัดเวลาโดยไม่ต้องคัดลอกไฟล์ด้วยตนเอง เพียงคัดลอก ~/.ssh/id_rsa.pub (หรือคีย์เริ่มต้น) จากระบบของคุณไปที่ ~/.ssh/authorized_keys บนเซิร์ฟเวอร์ระยะไกล

localhost:~$ ssh-copy-id user@remoteserver

8. การดำเนินการคำสั่งระยะไกล (ไม่โต้ตอบ)

ทีม ssh สามารถเชื่อมโยงกับคำสั่งอื่นๆ สำหรับอินเทอร์เฟซทั่วไปที่ใช้งานง่าย เพียงเพิ่มคำสั่งที่คุณต้องการรันบนรีโมตโฮสต์เป็นพารามิเตอร์สุดท้ายในเครื่องหมายคำพูด

localhost:~$ ssh remoteserver "cat /var/log/nginx/access.log" | grep badstuff.php

ในตัวอย่างนี้ grep ดำเนินการบนระบบโลคัลหลังจากดาวน์โหลดบันทึกผ่านช่องทาง ssh ถ้าไฟล์มีขนาดใหญ่ก็จะเรียกใช้ได้สะดวกกว่า grep ทางระยะไกลโดยเพียงใส่ทั้งสองคำสั่งด้วยเครื่องหมายคำพูดคู่

อีกตัวอย่างหนึ่งทำหน้าที่เดียวกันกับ ssh-copy-id จากตัวอย่างที่ 7

localhost:~$ cat ~/.ssh/id_rsa.pub | ssh remoteserver 'cat >> .ssh/authorized_keys'

9. การจับและดูแพ็คเก็ตระยะไกลใน Wireshark

ฉันเอาหนึ่งในของเรา ตัวอย่าง tcpdump. ใช้เพื่อจับแพ็กเก็ตจากระยะไกลและแสดงผลลัพธ์โดยตรงใน Wireshark GUI ในเครื่อง

:~$ ssh root@remoteserver 'tcpdump -c 1000 -nn -w - not port 22' | wireshark -k -i -

10. การคัดลอกโฟลเดอร์ในเครื่องไปยังเซิร์ฟเวอร์ระยะไกลผ่าน SSH

เคล็ดลับดีๆ ที่บีบอัดโฟลเดอร์โดยใช้ bzip2 (นี่คือตัวเลือก -j ในคำสั่ง tar) จากนั้นดึงข้อมูลสตรีม bzip2 ในอีกด้านหนึ่งเป็นการสร้างโฟลเดอร์ซ้ำบนเซิร์ฟเวอร์ระยะไกล

localhost:~$ tar -cvj /datafolder | ssh remoteserver "tar -xj -C /datafolder"

11. แอปพลิเคชัน GUI ระยะไกลพร้อมการส่งต่อ SSH X11

หากติดตั้ง X บนไคลเอนต์และเซิร์ฟเวอร์ระยะไกล คุณสามารถดำเนินการคำสั่ง GUI จากระยะไกลด้วยหน้าต่างบนเดสก์ท็อปภายในเครื่องของคุณได้ คุณลักษณะนี้มีมานานแล้ว แต่ก็ยังมีประโยชน์มาก เปิดใช้งานเว็บเบราว์เซอร์ระยะไกล หรือแม้แต่คอนโซล VMWawre Workstation เหมือนที่ฉันทำในตัวอย่างนี้

localhost:~$ ssh -X remoteserver vmware

สตริงที่จำเป็น X11Forwarding yes ในไฟล์ sshd_config.

12. การคัดลอกไฟล์ระยะไกลโดยใช้ rsync และ SSH

rsync สะดวกกว่ามาก scpหากคุณต้องการสำรองข้อมูลไดเร็กทอรี ไฟล์จำนวนมาก หรือไฟล์ที่มีขนาดใหญ่มากเป็นระยะ มีฟังก์ชันสำหรับการกู้คืนจากความล้มเหลวในการถ่ายโอนและการคัดลอกเฉพาะไฟล์ที่เปลี่ยนแปลงซึ่งช่วยประหยัดการรับส่งข้อมูลและเวลา

ตัวอย่างนี้ใช้การบีบอัด gzip (-z) และโหมดการเก็บถาวร (-a) ซึ่งเปิดใช้งานการคัดลอกแบบเรียกซ้ำ

:~$ rsync -az /home/testuser/data remoteserver:backup/

13. SSH ผ่านเครือข่าย Tor

เครือข่าย Tor ที่ไม่ระบุชื่อสามารถสร้างช่องสัญญาณการรับส่งข้อมูล SSH โดยใช้คำสั่ง torsocks. คำสั่งต่อไปนี้จะส่งผ่านพร็อกซี ssh ผ่าน Tor

localhost:~$ torsocks ssh myuntracableuser@remoteserver

Torsocks จะใช้พอร์ต 9050 บน localhost สำหรับพร็อกซี และเช่นเคย เมื่อใช้ Tor คุณจะต้องตรวจสอบอย่างจริงจังว่าการรับส่งข้อมูลใดที่กำลังถูกอุโมงค์และปัญหาด้านความปลอดภัยในการปฏิบัติงาน (opsec) อื่น ๆ แบบสอบถาม DNS ของคุณไปอยู่ที่ไหน?

14. อินสแตนซ์ SSH ถึง EC2

หากต้องการเชื่อมต่อกับ EC2 instance คุณต้องมีคีย์ส่วนตัว ดาวน์โหลด (นามสกุล .pem) จากแผงควบคุม Amazon EC2 และเปลี่ยนการอนุญาต (chmod 400 my-ec2-ssh-key.pem). เก็บกุญแจไว้ในที่ปลอดภัยหรือวางไว้ในโฟลเดอร์ของคุณเอง ~/.ssh/.

localhost:~$ ssh -i ~/.ssh/my-ec2-key.pem ubuntu@my-ec2-public

พารามิเตอร์ -i เพียงบอกไคลเอ็นต์ ssh ให้ใช้คีย์นี้ ไฟล์ ~/.ssh/config เหมาะสำหรับการกำหนดค่าการใช้งานคีย์โดยอัตโนมัติเมื่อเชื่อมต่อกับโฮสต์ ec2

Host my-ec2-public
   Hostname ec2???.compute-1.amazonaws.com
   User ubuntu
   IdentityFile ~/.ssh/my-ec2-key.pem

15. การแก้ไขไฟล์ข้อความโดยใช้ VIM ผ่าน ssh/scp

สำหรับคนรักทุกคน vim เคล็ดลับนี้จะช่วยประหยัดเวลาได้บ้าง โดยใช้ vim ไฟล์ได้รับการแก้ไขผ่าน scp ด้วยคำสั่งเดียว วิธีการนี้เพียงสร้างไฟล์ในเครื่อง /tmpแล้วคัดลอกกลับเมื่อเราบันทึกแล้ว vim.

localhost:~$ vim scp://user@remoteserver//etc/hosts

หมายเหตุ: รูปแบบจะแตกต่างจากปกติเล็กน้อย scp. หลังจากที่เจ้าบ้านเราได้สองเท่า //. นี่คือการอ้างอิงเส้นทางแบบสัมบูรณ์ เครื่องหมายทับหนึ่งอันจะระบุเส้นทางที่สัมพันธ์กับโฟลเดอร์หลักของคุณ users.

**warning** (netrw) cannot determine method (format: protocol://[user@]hostname[:port]/[path])

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

16. การติดตั้ง SSH ระยะไกลเป็นโฟลเดอร์ในเครื่องด้วย SSHFS

โดย sshfs - ไคลเอนต์ระบบไฟล์ ssh - เราสามารถเชื่อมต่อไดเร็กทอรีในเครื่องกับตำแหน่งระยะไกลพร้อมการโต้ตอบกับไฟล์ทั้งหมดในเซสชันที่เข้ารหัส ssh.

localhost:~$ apt install sshfs

ติดตั้งแพ็คเกจบน Ubuntu และ Debian sshfsจากนั้นเพียงติดตั้งตำแหน่งระยะไกลเข้ากับระบบของเรา

localhost:~$ sshfs user@remoteserver:/media/data ~/data/

17. SSH มัลติเพล็กซ์พร้อม ControlPath

โดยค่าเริ่มต้น หากมีการเชื่อมต่อกับเซิร์ฟเวอร์ระยะไกลที่ใช้อยู่แล้ว ssh การเชื่อมต่อครั้งที่สองโดยใช้ ssh หรือ scp สร้างเซสชันใหม่พร้อมการรับรองความถูกต้องเพิ่มเติม ตัวเลือก ControlPath อนุญาตให้ใช้เซสชันที่มีอยู่สำหรับการเชื่อมต่อที่ตามมาทั้งหมด สิ่งนี้จะช่วยเร่งกระบวนการได้อย่างมาก: ผลกระทบจะสังเกตเห็นได้ชัดเจนแม้ในเครือข่ายท้องถิ่นและยิ่งกว่านั้นเมื่อเชื่อมต่อกับทรัพยากรระยะไกล

Host remoteserver
        HostName remoteserver.example.org
        ControlMaster auto
        ControlPath ~/.ssh/control/%r@%h:%p
        ControlPersist 10m

ControlPath ระบุซ็อกเก็ตเพื่อตรวจสอบการเชื่อมต่อใหม่เพื่อดูว่ามีเซสชันที่ใช้งานอยู่หรือไม่ ssh. ตัวเลือกสุดท้ายหมายความว่าแม้ว่าคุณจะออกจากคอนโซลแล้ว เซสชันที่มีอยู่จะยังคงเปิดอยู่เป็นเวลา 10 นาที ดังนั้นในช่วงเวลานี้คุณจึงสามารถเชื่อมต่อใหม่บนซ็อกเก็ตที่มีอยู่ได้ สำหรับข้อมูลเพิ่มเติม โปรดดูวิธีใช้ ssh_config man.

18. สตรีมวิดีโอผ่าน SSH โดยใช้ VLC และ SFTP

แม้กระทั่งผู้ใช้เป็นเวลานาน ssh и vlc (Video Lan Client) อาจไม่ได้ตระหนักถึงตัวเลือกที่สะดวกสบายนี้เสมอไป เมื่อคุณต้องการรับชมวิดีโอผ่านเครือข่ายจริงๆ ในการตั้งค่า ไฟล์ | เปิดสตรีมเครือข่าย โครงการ vlc คุณสามารถระบุตำแหน่งเป็น sftp://. หากจำเป็นต้องใช้รหัสผ่าน ข้อความแจ้งจะปรากฏขึ้น

sftp://remoteserver//media/uploads/myvideo.mkv

19. การรับรองความถูกต้องด้วยสองปัจจัย

การตรวจสอบสิทธิ์แบบสองปัจจัยแบบเดียวกับบัญชีธนาคารหรือบัญชี Google ของคุณใช้กับบริการ SSH

แน่นอน ssh เริ่มแรกมีฟังก์ชันการตรวจสอบสิทธิ์แบบสองปัจจัย ซึ่งหมายถึงรหัสผ่านและคีย์ SSH ข้อดีของโทเค็นฮาร์ดแวร์หรือแอป Google Authenticator คือโดยปกติแล้วจะเป็นอุปกรณ์ทางกายภาพอื่น

ดูคำแนะนำ 8 นาทีของเราที่ ใช้ Google Authenticator และ SSH.

20. การกระโดดโฮสต์ด้วย ssh และ -J

หากการแบ่งส่วนเครือข่ายหมายความว่าคุณต้องข้ามโฮสต์ ssh หลายโฮสต์เพื่อไปยังเครือข่ายปลายทางสุดท้าย ทางลัด -J จะช่วยคุณประหยัดเวลา

localhost:~$ ssh -J host1,host2,host3 [email protected]

สิ่งสำคัญที่ต้องเข้าใจที่นี่คือมันไม่เหมือนกับคำสั่ง ssh host1แล้วก็ user@host1:~$ ssh host2 เป็นต้น ตัวเลือก -J ใช้การส่งต่ออย่างชาญฉลาดเพื่อบังคับให้ localhost สร้างเซสชันกับโฮสต์ถัดไปในห่วงโซ่ ในตัวอย่างข้างต้น localhost ของเราได้รับการรับรองความถูกต้องกับ host4 นั่นคือมีการใช้คีย์ localhost ของเรา และเซสชันจาก localhost ถึง host4 จะถูกเข้ารหัสอย่างสมบูรณ์

สำหรับความเป็นไปได้ดังกล่าวใน ssh_config ระบุตัวเลือกการกำหนดค่า ProxyJump. หากคุณต้องผ่านโฮสต์หลายเครื่องเป็นประจำ การทำงานอัตโนมัติผ่านการกำหนดค่าจะช่วยประหยัดเวลาได้มาก

21. บล็อกความพยายามดุร้าย SSH โดยใช้ iptables

ใครก็ตามที่จัดการบริการ SSH และดูบันทึกจะรู้เกี่ยวกับจำนวนความพยายามแบบเดรัจฉานที่เกิดขึ้นทุก ๆ ชั่วโมงของทุกวัน วิธีที่รวดเร็วในการลดสัญญาณรบกวนในบันทึกคือการย้าย SSH ไปยังพอร์ตที่ไม่ได้มาตรฐาน ทำการเปลี่ยนแปลงไฟล์ sshd_config ผ่านพารามิเตอร์การกำหนดค่า ท่าเรือ##.

ด้วย iptables คุณยังสามารถบล็อกความพยายามในการเชื่อมต่อกับพอร์ตได้อย่างง่ายดายเมื่อถึงเกณฑ์ที่กำหนด วิธีง่ายๆ ในการทำเช่นนี้คือการใช้ OSSECเนื่องจากไม่เพียงแต่บล็อก SSH แต่ยังใช้มาตรการตรวจจับการบุกรุก (HIDS) ที่ใช้ชื่อโฮสต์อื่นๆ อีกมากมาย

22. SSH Escape เพื่อเปลี่ยนการส่งต่อพอร์ต

และตัวอย่างสุดท้ายของเรา ssh ออกแบบมาเพื่อเปลี่ยนการส่งต่อพอร์ตได้ทันทีภายในเซสชันที่มีอยู่ ssh. ลองนึกภาพสถานการณ์นี้ คุณอยู่ลึกเข้าไปในเครือข่าย อาจจะกระโดดไปมากกว่าครึ่งโหลโฮสต์และต้องการพอร์ตในเครื่องบนเวิร์กสเตชันที่ส่งต่อไปยัง Microsoft SMB ของระบบ Windows 2003 เก่า (มีใครจำ ms08-67 ได้ไหม)

คลิก enterให้ลองเข้าคอนโซลดู ~C. นี่คือลำดับการควบคุมเซสชันที่อนุญาตให้ทำการเปลี่ยนแปลงกับการเชื่อมต่อที่มีอยู่

localhost:~$ ~C
ssh> -h
Commands:
      -L[bind_address:]port:host:hostport    Request local forward
      -R[bind_address:]port:host:hostport    Request remote forward
      -D[bind_address:]port                  Request dynamic forward
      -KL[bind_address:]port                 Cancel local forward
      -KR[bind_address:]port                 Cancel remote forward
      -KD[bind_address:]port                 Cancel dynamic forward
ssh> -L 1445:remote-win2k3:445
Forwarding port.

ที่นี่คุณจะเห็นได้ว่าเราได้ส่งต่อพอร์ตภายในเครื่อง 1445 ไปยังโฮสต์ Windows 2003 ที่เราพบในเครือข่ายภายใน ตอนนี้เพียงแค่วิ่ง msfconsoleและคุณสามารถไปต่อได้ (สมมติว่าคุณวางแผนที่จะใช้โฮสต์นี้)

เสร็จ

ตัวอย่าง คำแนะนำ และคำสั่งเหล่านี้ ssh ควรให้จุดเริ่มต้น ข้อมูลเพิ่มเติมเกี่ยวกับแต่ละคำสั่งและความสามารถมีอยู่ในหน้าคู่มือ (man ssh, man ssh_config, man sshd_config).

ฉันหลงใหลในความสามารถในการเข้าถึงระบบและดำเนินการคำสั่งได้ทุกที่ในโลกมาโดยตลอด โดยการพัฒนาทักษะของคุณด้วยเครื่องมือเช่น ssh คุณจะมีประสิทธิภาพมากขึ้นในทุกเกมที่คุณเล่น

ที่มา: will.com

เพิ่มความคิดเห็น