ตัวอย่างการปฏิบัติ SSH
แต่ยังนำทางเครือข่ายได้อย่างเชี่ยวชาญยิ่งขึ้น
รู้เคล็ดลับเล็กน้อย ssh
มีประโยชน์สำหรับผู้ดูแลระบบ วิศวกรเครือข่าย หรือผู้เชี่ยวชาญด้านความปลอดภัย
ตัวอย่าง SSH ที่ใช้งานได้จริง
พร็อกซีถุงเท้า SSH อุโมงค์ SSH (การส่งต่อพอร์ต) อุโมงค์ SSH ไปยังโฮสต์ที่สาม อุโมงค์ SSH ย้อนกลับ พร็อกซีย้อนกลับ SSH การติดตั้ง VPN ผ่าน SSH การคัดลอกคีย์ SSH (ssh-copy-id) การดำเนินการคำสั่งระยะไกล (ไม่โต้ตอบ) การจับและดูแพ็กเก็ตระยะไกลใน Wireshark การคัดลอกโฟลเดอร์ในเครื่องไปยังเซิร์ฟเวอร์ระยะไกลผ่าน SSH แอปพลิเคชัน GUI ระยะไกลพร้อมการส่งต่อ SSH X11 การคัดลอกไฟล์ระยะไกลโดยใช้ rsync และ SSH SSH ผ่านเครือข่าย Tor อินสแตนซ์ SSH ถึง EC2 การแก้ไขไฟล์ข้อความโดยใช้ VIM ผ่าน ssh/scp เมานต์ SSH ระยะไกลเป็นโฟลเดอร์ในเครื่องด้วย SSHFS มัลติเพล็กซ์ SSH ด้วย ControlPath สตรีมวิดีโอผ่าน SSH โดยใช้ VLC และ SFTP การรับรองความถูกต้องด้วยสองปัจจัย กระโดดโฮสต์ด้วย SSH และ -J การบล็อกความพยายามแบบเดรัจฉาน SSH โดยใช้ iptables 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 และพอร์ตที่จะเชื่อมต่อ
โปรดทราบว่าตัวเลือกที่ด้านล่างของแบบฟอร์มเพื่อให้คำขอ DNS ของเบราว์เซอร์ของคุณผ่านพร็อกซี SOCKS ด้วย หากคุณใช้พร็อกซีเซิร์ฟเวอร์เพื่อเข้ารหัสการรับส่งข้อมูลเว็บบนเครือข่ายท้องถิ่นของคุณ คุณอาจต้องการเลือกตัวเลือกนี้เพื่อให้คำขอ DNS ถูกส่งผ่านช่องทางการเชื่อมต่อ SSH
กำลังเปิดใช้งานพร็อกซีถุงเท้าใน Chrome
การเปิด Chrome ด้วยพารามิเตอร์บรรทัดคำสั่งบางอย่างจะเปิดใช้งานพร็อกซีถุงเท้า เช่นเดียวกับการส่งคำขอ DNS จากเบราว์เซอร์ เชื่อแต่เช็ค.. ใช้
localhost:~$ google-chrome --proxy-server="socks5://192.168.1.10:8888"
การใช้แอปพลิเคชันอื่นกับพรอกซี
โปรดทราบว่าแอปพลิเคชันอื่นๆ จำนวนมากอาจใช้พร็อกซีถุงเท้าด้วย เว็บเบราว์เซอร์เป็นเว็บที่ได้รับความนิยมมากที่สุด แอปพลิเคชั่นบางตัวมีตัวเลือกการกำหนดค่าเพื่อเปิดใช้งานพร็อกซีเซิร์ฟเวอร์ คนอื่นๆ ต้องการความช่วยเหลือเล็กน้อยเกี่ยวกับโปรแกรมตัวช่วย ตัวอย่างเช่น,
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 และ พร็อกซีเชนแต่มีข้อจำกัดบางประการ เช่นจะไม่สามารถทำงานโดยตรงกับซ็อกเก็ตได้ ดังนั้น เราจะไม่สามารถสแกนพอร์ตภายในเครือข่ายผ่านทาง 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. ตอนนี้เป็นชัยชนะแล้ว
หากเกิดปัญหาใดๆ ให้ใช้ 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
ฉันเอาหนึ่งในของเรา
:~$ 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
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 นาทีของเราที่
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
คุณยังสามารถบล็อกความพยายามในการเชื่อมต่อกับพอร์ตได้อย่างง่ายดายเมื่อถึงเกณฑ์ที่กำหนด วิธีง่ายๆ ในการทำเช่นนี้คือการใช้
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