Secure Shell (SSH) เป็นโพรโตคอลในการสร้างการติดต่อเพื่อเข้าใช้งานระบบอย่างปลอดภัยมากกว่าการติดต่อแบบเดิมๆ
ที่มีการส่งข้อมูลเป็นเพียงตัวอักษรเปล่าๆ (Plain text) โดยที่โพรโตคอลดังกล่าวจะทำการเข้ารหัสข้อมูลทุกอย่างไม่ว่าจะเป็น
ชื่อผู้ใช้ รหัสผ่าน หรือข้อมูลอื่นๆ ก่อนที่จะทำการส่งไปยังเครื่องเซิร์ฟเวอร์
โดยปกตินิยมนำ SSH มาใช้งานแทน telnet เพราะมีความปลอดภัยมากกว่า
Secure File Transfer Protocol (SFTP) เป็นโพรโตคอลที่นำมาใช้แทน FTP
โดยจะเป็นส่วนหนึ่งของ SSH ซึ่งจะมี sftpserv เป็นโปรแกรมที่รันอยู่ที่ฝั่งเซิร์ฟเวอร์
รอรับการติดต่อจากไคลเอ็นต์ผ่านทางคำสั่ง sftp บนระบบปฏิบัติการ linux และในระบบปฏิบัติการ
Windows ก็มีโปรแกรมที่จะใช้สำหรับติดต่อและโอนถ่ายข้อมูลกับเซิร์ฟเวอร์ผ่าน
SSH ด้วย เช่น SecureFX และ SSH Secure Shell Client เป็นต้น
Secure Copy (SCP) เป็นวิธีการหนึ่งในรับส่งข้อมูลข้ามระบบเครือข่าย
โดยมีลักษณะเป็นการคัดลอกข้อมูลระหว่างเครื่อง 2 เครื่อง และอาศัยโพรโตคอล Secure
Shell เช่นเดียวกับ SFTP ซึ่งจะแตกต่างกันที่ SFTP จะต้อง Login เข้าไปที่ระบบก่อนแล้วจึงสามารถที่จะรับส่งไฟล์ได้
แต่ SCP นั้นจะป้อนรหัสผ่านทุกครั้งที่ทำการรับส่งไฟล์
วิธีการส่วนมากที่ผู้โจมตีใช้กันคือการดักขโมยข้อมูลระหว่างไคลเอ็นต์และเซิร์ฟเวอร์ผ่านทางโพรโตคอล
telnet ซึ่งข้อมูลที่ดักได้อาจจะเป็นชื่อที่ใช้ Login และรหัสผ่าน ที่ไม่ได้ถูกเข้ารหัสไว้
โดยใช้โปรแกรมประเภท Sniffer ทั่วๆไป ดังรูปที่ 1 และถ้าเกิดกรณีที่ผู้โจมตีดักขโมยชื่อผู้ใช้คือ
root และรหัสผ่าน ความเสียหายที่ตามมาอาจจะมากจนเกินที่จะแก้ไขได้
ดังนั้นวิธีแก้ไขคือ ยกเลิกการใช้โพรโตคอล telnet โดยใช้โพรโตคอล SSH แทน และใช้
SFTP แทนโพรโตคอลของ FTP ทั้งนี้เพื่อความปลอดภัยจากการถูกดักข้อมูลขณะทำการส่ง
ดังรูปที่ 2

รูปที่ 1 แสดงผลจากการใช้ telnet ในการทำ remote access ไปยังเซิร์ฟเวอร์และผู้โจมตีสามารถดักข้อมูลได้

รูปที่ 2 แสดงผลจากการใช้ ssh จะสังเกตว่ารหัสผ่านที่ส่งจากไคลเอ็นต์นั้นจะถูกเข้ารหัสไว้
ในระบบปฏิบัติการ linux Red Hat เวอร์ชัน 7.2 นั้นมีแพ็กเกจ OpenSSH (มีแพ็กเกจชื่อ
openssh) ที่มีทั้ง openssh-serv (สำหรับเซิร์ฟเวอร์) และ openssh-client (สำหรับไคลเอ็นต์)
แพ็กเกจดังกล่าวต้องการแพ็กเกจ OpenSSL (มีแพ็กเกจชื่อ openssl) ดังนั้นก่อนการติดตั้ง
openssh นั้นต้องติดตั้ง openssl ก่อนเสมอ
การปรับแต่งจะมุ่งเน้นไปที่การปรับแต่งค่าของ SSHD เป็น daemon ของฝั่งเซิร์ฟเวอร์ที่รอรับการติดต่อจากไคลเอ็นต์
ให้มีความปลอดภัยมากที่สุด โดยจะทำการแก้ไขในไฟล์ที่ชื่อ /etc/ssh/sshd_config
ซึ่งรายละเอียดในไฟล์ที่สำคัญมีดังนี้ และให้ลบ # ที่อยู่หน้า option ต่อไปนี้
Port 22
ระบุหมายเลขพอร์ตที่ใช้ในการติดต่อ โดยค่า default แล้วจะอยู่ที่พอร์ตที่
22 แต่ถ้าแก้ไขให้ใช้พอร์ตอื่นก็จะสามารถหลอกแฮ็กเกอร์ที่อ่อนประสบการณ์ที่ได้รหัสผ่านแต่ก็ยังไม่ทราบพอร์ตได้
ListenAddress 192.168.1.1
ระบุหมายเลข IP ให้กับฝั่งเซิร์ฟเวอร์ว่าให้รอรับการติดต่อทาง IP ใด จะเห็นผลชัดเจนยิ่งขึ้น
ถ้าเครื่องเซิร์ฟเวอร์ดังกล่าวให้บริการไฟร์วอลล์ด้วย
HostKey /etc/ssh/ssh_host_key
ระบุไดเรกทอรีที่ใช้เก็บคีย์ private ของโฮสต์
ServerKeyBits 1024
ระบุจำนวนบิตที่จะใช้ในคีย์ของเซิร์ฟเวอร์ ซึ่ง default คือ 768 ให้ทำการแก้ไขเป็น
1024
LoginGraceTime 600
ระบุเวลาในหน่วยวินาทีหลังจากมีการร้องขอการติดต่อจากไคลเอ็นต์จนกระทั่งสิ้นสุดการติดต่อโดยที่ยังไม่มีการ
Login
KeyRegenerationInterval 3600
ระบุอายุของคีย์ หรือระยะเวลาเป็นวินาทีที่จะสร้างคีย์ใหม่ โดยค่า default
อยู่ที่ 3600
PermitRootLogin no
ระบุว่าอนุญาตให้ accout ของ root ทำการ login เข้าระบบได้โดยตรงหรือไม่ ให้เปลี่ยนเป็น
no
IgnoreRhosts yes
ระบุไม่อนุญาตให้ใช้ไฟล์ rhosts หรือ shosts สำหรับการ authenticate
StrictModes yes
ก่อนที่จะมีการอนุญาตให้ Login เข้ามาในระบบได้ sshd จะตรวจสอบ permission
ในไดเรกทอรี home ของผู้ใช้แต่ละคน และไฟล์ rhosts ก่อน ดังนั้นออปชันนี้ให้เลือก
yes เพราะบางครั้งผู้ใช้บางคนอาจจะเปลี่ยนแปลง permission ให้ผู้อื่นสามารถเขียนได้โดยไม่เจตนา
PrintMotd yes
ระบุให้ sshd แสดงข้อความที่อยู่ในไฟล์ /etc/motd เมื่อมีผู้ใช้งานระบบทำการ
Login ซึ่งไฟล์ /etc/motd นั้นรู้จักกันในชื่อของ "message of the day"
RhostsAuthentication no
ระบุให้ sshd สามารถที่จะใช้ rhosts ในการ authenticate ได้ แนะนำว่าไม่ควรที่จะใช้เพราะว่า
rhosts นั้นไม่มีความปลอดภัย
RhostsRSAAuthentication no
ระบุว่าจะให้สามารถใช้ rhosts ร่วมกับ RSA ในการ authenticate ได้หรือไม่
RSAAuthentication yes
ระบุว่าให้ใช้ RSA ในการ Authenticate โดย RSA จะใช้คีย์คู่ทั้ง public และ
private ที่ถูกสร้างโดย ssh-keygen1utility ในกระบวนการ Authenticate
PasswordAuthentication yes
ระบุว่าให้ใช้รหัสผ่านในการทำ Authenticate
PermitEmptyPasswords no
ระบุว่าจะอนุญาตให้ Login โดยไม่ต้องใช้รหัสผ่านหรือไม่ ให้เลือก no เพื่อบังคับให้ป้อนรหัสผ่านทุกครั้ง
AllowUsers admin
ระบุว่าจะอนุญาตให้ใคร Login ได้บ้าง โดยค่า default แล้วจะอนุญาตให้ทุกคนสามารถ
Login เข้าระบบได้ และสามารถเพิ่มชื่อผู้ใช้ที่อนุญาตได้หลายคน โดยแยกแต่ละชื่อด้วยเครื่องหมายช่องว่างหรือ
space
Subsystem sftp /usr/libexec/openssh/sftp-server
ระบุให้ใช้ sftp โดยค่า default จะอนุญาตอยู่แล้ว