คำสั่ง Linux และทักษะเชลล์
ssh: การเชื่อมต่อที่เรียกใช้โครงสร้างพื้นฐานของคุณ
ssh ไม่ใช่ความสะดวกสบาย แต่เป็นการขนส่งทุกการดำเนินการบนทุกเซิร์ฟเวอร์ที่ใช้งานอยู่ และ ~/.ssh/config เป็นสัญญากับตัวตนในอนาคตของคุณในเวลา 03.00 น. นามแฝงของโฮสต์, รายการ IdentityFile, เป้าหมาย ProxyJump และการตั้งค่า Keepalive จะเปลี่ยนประโยคแฟล็กที่จดจำไว้เป็นคำสั่งแบบคำเดียว Tunnels (-L, -R, -D) และมัลติเพล็กซ์ของ ControlMaster คือสิ่งที่เปลี่ยน 'เชลล์' ให้เป็นพื้นผิวคำสั่งโครงสร้างพื้นฐาน และทั้งคู่เป็นงานไฟล์กำหนดค่า ไม่ใช่งานหน่วยความจำ
ประเด็นสำคัญ
- ใส่ทุกอย่างใน ~/.ssh/config: Host aliases ด้วย User, IdentityFile, IdentitiesOnly yes และ ProxyJump ทำให้ 'ssh prod-web1' เป็นคำเดียว ประโยคแฟล็กที่พิมพ์เหมือนกันห้าครั้งต่อวันถือเป็นรายการการกำหนดค่าที่ขาดหายไป
- คีย์เป็นเพียงเกมเดียว: ssh-keygen -t ed25519 -C 'role@team', ครึ่งสาธารณะถึงauthorized_keysและPasswordAuthentication noบนเซิร์ฟเวอร์เมื่อการหมุนได้รับการพิสูจน์แล้วว่าใช้งานได้จริง
- โฮสต์ Jump ยุบเป็นแฟล็กเดียว: ssh -J bastion.corp Internal-host หรือ ProxyJump bastion.corp ในบล็อก Host คาถา ProxyCommand แบบเก่ายังคงใช้งานได้และไม่ใช่งานของใครอีกต่อไป
- Tunnels มีวัตถุประสงค์เฉพาะ: -L 5432:db.internal:5432 เพื่อเข้าถึงฐานข้อมูล -D 1080 เป็น SOCKS shim ผ่านเครือข่ายที่เข้มงวด -R เพื่อแสดงกล่อง dev ในเครื่อง ซึ่งแต่ละอันเชื่อมโยงกับ localhost เว้นแต่คุณจะขยายอย่างชัดเจน
- มัลติเพล็กซ์ของ ControlMaster (อัตโนมัติ ControlMaster, ControlPath ~/.ssh/cm-%r@%h:%p, ControlPersist 10m) หยุดการรันการจับมือกันใหม่ทุกครั้งที่เปิด และทำให้หลายหน้าต่างทำงานบนโฮสต์เดียวได้ทันที
- Keepalives เก็บเซสชันผ่าน NAT และไฟร์วอลล์ที่ไม่ได้ใช้งาน: ServerAliveInterval 60 บวกกับฝั่งไคลเอ็นต์ ServerAliveCountMax 3 เต้นลึกลับ 'เซสชันเสียชีวิตในเวลา 4 นาที' รายงานเกือบตลอดเวลา
- จำกัดการเข้าถึงที่เป็นอันตราย: -N (ไม่มีคำสั่งระยะไกล) สำหรับการส่งต่อพอร์ตล้วนๆ -n สำหรับงานแบตช์ที่อ่านจาก stdin และ failed2ban บวกกับ MaxAuthTries ที่มีสติ ดังนั้น bruteforce จึงตายในบันทึกแทนที่จะเป็นบัญชี
- ลำดับการแก้ไขข้อบกพร่องมีความสำคัญ: ssh -vvv เผยการแยกวิเคราะห์การกำหนดค่า การเจรจาต่อรองการรับรองความถูกต้อง และความล้มเหลวของช่องสัญญาณตามลำดับนั้น และการถ่ายโอนข้อมูลโฮสต์ -G ตอบว่า 'เหตุใดจึงเลือกคีย์นั้นและผู้ใช้นั้น' โดยไม่ต้องแตะเซิร์ฟเวอร์
บันทึกจากหน้างาน
ครั้งหนึ่งฉันเคยปิดการใช้งาน PasswordAuthentication ก่อนที่รหัสใหม่จะอยู่ใน allowance_keys และล็อคทีมของฉันเองออกไปในช่วงเย็น พิธีกรรมตอนนี้: เปิดเซสชันที่สอง คีย์ได้รับการพิสูจน์แล้ว และ ServerAliveInterval ในการกำหนดค่า ดังนั้น NAT ของป้อมปราการที่ไม่ได้ใช้งานจึงหยุดการฆ่าเซสชัน
คำถามที่พบบ่อย
ในหนึ่งประโยคแต่ละประโยค: -L, -R, -D?
-L นำพอร์ตท้องถิ่นไปข้างหน้าไปยังบริการระยะไกล -R ผลักพอร์ตระยะไกลกลับไปที่เครื่องของคุณ (รู้ว่าคุณเปิดเผยอะไร) และ -D เปิดพร็อกซี SOCKS แบบไดนามิกผ่านการเชื่อมต่อ
เซสชันของฉันลดลงหลังจากไม่ได้ใช้งานไม่กี่นาที แก้ไข?
การหมดเวลาที่ไม่ได้ใช้งานบน NAT หรือไฟร์วอลล์เป็นสาเหตุปกติ: ตั้งค่า ServerAliveInterval บนไคลเอนต์ (และรักษา TCPKeepAlive มีสติบนเซิร์ฟเวอร์); การแก้ไขเดียวกันนี้อยู่ในการกำหนดค่าที่คุณใช้สำหรับการกระโดดป้อมปราการชั้นใต้ดิน
ssh-agent หรือคีย์ที่ไม่มีข้อความรหัสผ่าน?
เจ้าหน้าที่ เสมอ: เก็บคีย์ที่ถอดรหัสไว้ต่อเซสชัน ดังนั้นคีย์จะเก็บข้อความรหัสผ่านและระบบอัตโนมัติจะไม่ทำงานแบบโต้ตอบ ForwardAgent ใช่บนป้อมปราการที่เชื่อถือได้และ ssh-add -l จะบอกคุณว่ามีอะไรโหลดอยู่บ้างก่อนที่คุณจะโกหกตัวเอง
ฉันจะหยุดพิมพ์ข้อกำหนดเฉพาะของทันเนลอีกครั้งได้อย่างไร
บรรทัด LocalForward และ RemoteForward ภายในบล็อกโฮสต์: 'ssh dbtunnel' จากนั้นจะทำสิ่งทั้งหมด หนึ่งรายการต่อวัตถุประสงค์ช่วยให้ไฟล์สามารถอ่านได้และให้การตรวจสอบเห็นว่าใครส่งต่ออะไร
Kinetikatech ช่วยเรื่อง คำสั่ง linux และทักษะเชลล์ ได้อย่างไร
เราเคยรับเรื่องแบบนี้มาเป็นร้อยครั้ง: คำสั่งและพฤติกรรมการเขียนสคริปต์ที่ตัดสินใจว่าผู้ดูแลระบบจะใช้งานเซิร์ฟเวอร์หรือต่อสู้กับเซิร์ฟเวอร์: ค้นหา แปลง ถ่ายโอน และดูแลข้อความและกระบวนการด้วยเครื่องมือที่อยู่ในทุกการติดตั้งฐาน กับ ความปลอดภัยเซิร์ฟเวอร์ Linuxและการจัดการเซิร์ฟเวอร์ คุณได้วงจรครบ ตั้งแต่เราประเมิน ลงมือทำ เฝ้าดูตลอดเวลา และรับเรื่องภายใน 30 นาทีเมื่อจำเป็น