[{"data":1,"prerenderedAt":1109},["ShallowReactive",2],{"search-posts-dataset":3,"post-detail-/posts/ssh-key-authentication":159,"all-published-articles-list":1048,"series-posts-/posts/ssh-key-authentication":1108},[4,20,35,48,62,75,87,99,111,122,135,149],{"path":5,"title":6,"description":7,"categories":8,"tags":11,"date":16,"image":17},"/posts/incident-checklist","Checklist xử lí sự cố máy chủ Linux: Phục hồi sau thảm họa","Qui trình phản ứng và xử lí sự cố máy chủ Linux khi hệ thống bị sập, tràn RAM/HDD hoặc nghi ngờ bị xâm nhập: Các bước chuẩn đoán, cô lập, phân tích log và khôi phục.",[9,10],"linux","devops",[12,13,14,15],"incident","troubleshooting","security","sysadmin","2026-08-15T00:00:00.000Z",{"src":18,"alt":19},"/img/incident-response.webp","Xử lí sự cố máy chủ Linux",{"path":21,"title":22,"description":23,"categories":24,"tags":27,"date":31,"image":32},"/posts/backup-postgres-docker","Sao lưu tự động PostgreSQL trong Docker với cron job và gzip","Hướng dẫn xây dựng script tự động backup database PostgreSQL chạy trong Docker container: gzip, cron hàng ngày, tự động xóa bản sao lưu cũ và kiểm thử phục hồi.",[25,26],"docker","database",[28,29,30,10],"postgresql","backup","automation","2025-10-20T00:00:00.000Z",{"src":33,"alt":34},"/img/postgres-backup.webp","Sao lưu tự động PostgreSQL Docker",{"path":36,"title":37,"description":38,"categories":39,"tags":40,"date":44,"image":45},"/posts/docker-compose-production","Thiết kế Docker compose chuẩn Production","Hướng dẫn thực chiến xây dựng docker-compose.yml hoàn chỉnh cho Production: healthchecks, restart policies, resource limits, quản lí .env và Persistent Volumes",[25,10],[41,42,43],"production","compose","backend","2025-10-15T00:00:00.000Z",{"src":46,"alt":47},"/img/docker-compose.webp","Docker Compose Production Best Practices",{"path":49,"title":50,"description":51,"categories":52,"tags":53,"date":58,"image":59},"/posts/monitoring-server-basics","Giám sát server Linux từ cơ bản đến nâng cao: htop, ncdu, prometheus và Uptime Kuma","Cẩm nang toàn diện về giám sát hiệu năng máy chủ Linux: Khai thác công cụ CLI thời gian thực (Htop, Btop, Ncdu), thiết lập hệ thống cảnh báo sự cố Uptime Kuma qua Telegram và thu thập chỉ số với Prometheus & Grafana.",[9,10],[54,55,56,57],"monitoring","grafana","prometheus","uptime","2024-10-18T00:00:00.000Z",{"src":60,"alt":61},"/img/monitoring.webp","Giám sát máy chủ Linux",{"path":63,"title":64,"description":65,"categories":66,"tags":68,"date":71,"image":72},"/posts/nginx-reverse-proxy","Hướng dẫn cấu hình Nginx Reverse Proxy với SSL Certbot và Docker chuẩn Production","Cẩm nang toàn diện cấu hình Nginx Reverse Proxy trên Ubuntu: Tích hợp chứng chỉ SSL Let's Encrypt miễn phí qua Certbot, hỗ trợ WebSockets, HTTP/2, nén Brotli/Gzip và Rate Limiting chống DDoS.",[9,67],"nginx",[10,69,70],"ssl","webserver","2024-10-10T00:00:00.000Z",{"src":73,"alt":74},"/img/nginx.webp","Nginx Reverse Proxy với SSL",{"path":76,"title":77,"description":78,"categories":79,"tags":80,"date":83,"image":84},"/posts/how-to-secure-a-vps","Bảo mật máy chủ Linux VPS: Cẩm nang toàn diện 8 bước chống tấn công","Hướng dẫn thực chiến từng bước thiết lập bảo mật máy chủ Linux VPS mới: Vô hiệu hóa mật khẩu SSH, thiết lập SSH Key Ed25519, cấu hình Fail2ban, tường lửa UFW và cập nhật tự động Unattended-Upgrades.",[9,14],[81,82,10],"vps","hardening","2024-10-05T00:00:00.000Z",{"src":85,"alt":86},"/img/linux-security.webp","Bảo mật máy chủ Linux VPS",{"path":88,"title":89,"description":90,"categories":91,"tags":92,"date":95,"image":96},"/posts/systemd-node-service","Quản lí ứng dụng Node.js trong Production với Systemd Service và Journalctl","Hướng dẫn triển khai ứng dụng Node.js, Go hoặc Python dưới dạng Systemd Service trên Linux: Tự động khởi động lại khi crash, quản lý biến môi trường, giới hạn bộ nhớ RAM và theo dõi log thời gian thực với Journalctl.",[9,10],[93,94,43,41],"systemd","nodejs","2024-10-01T00:00:00.000Z",{"src":97,"alt":98},"/img/systemd.webp","Quản lý ứng dụng với Systemd Service",{"path":100,"title":101,"description":102,"categories":103,"tags":104,"date":107,"image":108},"/posts/how-to-install-docker-on-ubuntu-server","Hướng dẫn cài đặt Docker & Docker compose trên Ubuntu server","Hướng dẫn toàn diện cách cài đặt Docker Engine và Docker Compose V2 trên Ubuntu Server, cấu hình bảo mật non-root user, tối ưu daemon và xử lí xung đột tường lửa UFW",[9,25],[105,10,106],"beginner","ubuntu","2024-09-30T00:00:00.000Z",{"src":109,"alt":110},"/img/docker.webp","Cài đặt Docker trên Ubuntu Server",{"path":112,"title":113,"description":114,"categories":115,"tags":116,"date":118,"image":119},"/posts/ssh-key-authentication","Xác thực SSH Key từ cơ bản đến nâng cao: Ed25519, SSH Config và Bảo mật đa tầng","Cẩm nang toàn diện về xác thực SSH Key trên máy chủ Linux: So sánh Ed25519 vs RSA, cấu hình SSH Config quản lí hàng chục VPS, chuyển tiếp Agent Forwarding, và các qui tắc bảo mật chống lộ khóa.",[9,14],[117,10,15],"ssh","2024-09-25T00:00:00.000Z",{"src":120,"alt":121},"/img/ssh-keys.webp","Xác thực SSH Key Linux",{"path":123,"title":124,"description":125,"categories":126,"tags":127,"date":131,"image":132},"/posts/ufw-firewall-basics","Làm chủ tường lửa UFW trên Linux: Qui tắc, giới hạn kết nối và xử lí xung đột Docker","Hướng dẫn toàn diện làm chủ tường lửa UFW (Uncomplicated Firewall) trên Ubuntu: Thiết lập chính sách mặc định, mở cổng theo IP, giới hạn brute-force (Rate Limiting) và khắc phục lỗi Docker bypass tường lửa.",[9,14],[128,129,130,15],"ufw","firewall","networking","2024-09-20T00:00:00.000Z",{"src":133,"alt":134},"/img/ufw-firewall.webp","Cấu hình Tường lửa UFW Linux",{"path":136,"title":137,"description":138,"categories":139,"tags":141,"date":145,"image":146},"/posts/git-deploy-key","Tự động hóa triển khai với Git deploy keys: Thiết lập an toàn cho GitHub và GitLab","Hướng dẫn thiết lập Git Deploy Key chuẩn bảo mật để kéo mã nguồn tự động từ GitHub hoặc GitLab về máy chủ Production: Phân quyền Read-Only, cấu hình SSH Config và tích hợp Webhook tự động cập nhật.",[140,10],"git",[142,143,144,30],"github","gitlab","cicd","2024-09-18T00:00:00.000Z",{"src":147,"alt":148},"/img/git-deploy.webp","Git Deploy Keys cho máy chủ",{"path":150,"title":151,"description":152,"categories":153,"tags":154,"date":155,"image":156},"/posts/ubuntu-server-initial-setup","Qui trình thiết lập ban đầu cho Ubuntu Server: Swap, Timezone, User và Firewall","Hướng dẫn các bước thiết lập chuẩn mực ban đầu cho máy chủ Ubuntu Server mới: Cấu hình múi giờ Việt Nam (Asia/Ho_Chi_Minh), tạo phân vùng RAM ảo (Swap File), phân quyền Sudoer và kích hoạt tường lửa UFW.",[9],[106,105,15],"2024-09-15T00:00:00.000Z",{"src":157,"alt":158},"/img/ubuntu.webp","Thiết lập ban đầu Ubuntu Server",{"id":160,"title":113,"author":161,"body":162,"categories":1036,"date":118,"description":114,"draft":1037,"extension":1038,"image":1039,"meta":1040,"navigation":465,"path":112,"seo":1041,"series":1042,"series_order":1042,"slug":1043,"stem":1044,"tags":1045,"updated":1046,"__hash__":1047},"post/posts/ssh-key-authentication.md","Dương Thụ",{"type":163,"value":164,"toc":1018},"minimal",[165,170,179,192,199,219,222,225,229,236,241,261,263,267,270,302,305,326,337,340,359,373,375,379,387,419,423,426,503,505,512,519,525,537,540,661,664,676,679,681,685,692,735,741,765,767,771,774,781,797,800,825,828,856,858,862,865,1002,1004,1008,1014],[166,167,169],"h2",{"id":168},"giới-thiệu-tại-sao-mật-khẩu-truyền-thống-không-còn-an-toàn","Giới thiệu: Tại sao mật khẩu truyền thống không còn an toàn?",[171,172,173,174,178],"p",{},"Giao thức ",[175,176,177],"strong",{},"SSH (Secure Shell)"," là cánh cổng chính để các kĩ sư hệ thống truy cập và quản lí các máy chủ Linux từ xa. Tuy nhiên, phương thức đăng nhập bằng mật khẩu (Password-based Authentication) tiềm ẩn nhiều rủi ro nghiêm trọng:",[180,181,182,186,189],"ul",{},[183,184,185],"li",{},"Dễ bị tấn công vét cạn (Brute-force) và tấn công từ điển (Dictionary Attack) bởi hàng triệu botnet tự động quét Internet mỗi ngày.",[183,187,188],{},"Người dùng có xu hướng đặt mật khẩu dễ nhớ hoặc tái sử dụng mật khẩu trên nhiều máy chủ.",[183,190,191],{},"Rủi ro bị nghe lén hoặc ghi lại bàn phím (Keylogger) trên máy khách.",[171,193,194,195,198],{},"Phương thức xác thực bằng ",[175,196,197],{},"Cặp khóa bất đối xứng (SSH Key Pair Authentication)"," giải quyết triệt để những điểm yếu này. Một cặp khóa gồm:",[200,201,202,208],"ol",{},[183,203,204,207],{},[175,205,206],{},"Private Key (Khóa bí mật)",": Lưu giữ an toàn trên máy tính cá nhân của bạn, không bao giờ chia sẻ cho bất kì ai.",[183,209,210,213,214,218],{},[175,211,212],{},"Public Key (Khóa công khai)",": Đặt trên máy chủ đích tại file ",[215,216,217],"code",{},"~/.ssh/authorized_keys",".",[171,220,221],{},"Khi kết nối, máy chủ gửi một thử thách mã hóa (Cryptographic Challenge) và chỉ có người sở hữu Private Key tương ứng mới có thể giải mã và phản hồi, cho phép đăng nhập tức thì mà không cần truyền mật khẩu qua mạng.",[223,224],"hr",{},[166,226,228],{"id":227},"_1-lựa-chọn-thuật-toán-tại-sao-nên-chọn-ed25519-thay-vì-rsa","1. Lựa chọn thuật toán: Tại sao nên chọn Ed25519 thay vì RSA?",[171,230,231,232,235],{},"Trong nhiều năm, thuật toán RSA (2048-bit hoặc 4096-bit) là tiêu chuẩn phổ biến nhất. Tuy nhiên, hiện nay ",[175,233,234],{},"Ed25519 (Elliptic Curve Cryptography - Mã hóa đường cong Elliptic)"," đã trở thành lựa chọn vượt trội được khuyến nghị trên toàn cầu.",[237,238,240],"h3",{"id":239},"so-sánh-ed25519-và-rsa","So sánh Ed25519 và RSA:",[180,242,243,249,255],{},[183,244,245,248],{},[175,246,247],{},"Độ dài khóa cực ngắn",": Ed25519 chỉ có 68 ký tự (khóa công khai), giúp dễ dàng sao chép và quản lý, trong khi RSA-4096 dài hơn 700 ký tự.",[183,250,251,254],{},[175,252,253],{},"Tốc độ tính toán",": Tạo khóa và ký xác thực nhanh gấp nhiều lần so với RSA.",[183,256,257,260],{},[175,258,259],{},"Độ an toàn mật mã",": Cung cấp mức độ bảo mật tương đương khóa RSA 3072-bit nhưng có khả năng chống lại các cuộc tấn công kênh phụ (Side-channel Attacks).",[223,262],{},[166,264,266],{"id":265},"_2-các-bước-tạo-cặp-khóa-ssh-ed25519-chuẩn-mực","2. Các bước tạo cặp khóa SSH Ed25519 chuẩn mực",[171,268,269],{},"Trên máy tính cá nhân của bạn (macOS, Linux hoặc Windows Terminal), mở Terminal và chạy lệnh:",[271,272,277],"pre",{"className":273,"code":274,"language":275,"meta":276,"style":276},"language-bash shiki shiki-themes github-dark github-dark github-dark","ssh-keygen -t ed25519 -C \"admin@mycompany.com\"\n","bash","",[215,278,279],{"__ignoreMap":276},[280,281,284,288,292,296,299],"span",{"class":282,"line":283},"line",1,[280,285,287],{"class":286},"sb7EE","ssh-keygen",[280,289,291],{"class":290},"sKJT9"," -t",[280,293,295],{"class":294},"skqr8"," ed25519",[280,297,298],{"class":290}," -C",[280,300,301],{"class":294}," \"admin@mycompany.com\"\n",[171,303,304],{},"Quá trình tạo khóa sẽ yêu cầu bạn nhập:",[200,306,307,320],{},[183,308,309,312,313,316,317,218],{},[175,310,311],{},"File lưu trữ",": Nhấn ",[215,314,315],{},"Enter"," để lưu mặc định tại ",[215,318,319],{},"~/.ssh/id_ed25519",[183,321,322,325],{},[175,323,324],{},"Passphrase (Mật mã bảo vệ khóa)",": Nhập một cụm mật mã mạnh để mã hóa Private Key của bạn trên đĩa.",[327,328,330],"info-box",{"type":329},"warning",[171,331,332,333,336],{},"Luôn đặt ",[175,334,335],{},"Passphrase"," khi tạo SSH Key. Nếu chẳng may laptop của bạn bị mất cắp, kẻ gian có file Private Key vẫn không thể sử dụng được nếu không biết Passphrase giải mã.",[171,338,339],{},"Kiểm tra cặp khóa đã được tạo thành công:",[271,341,343],{"className":273,"code":342,"language":275,"meta":276,"style":276},"ls -la ~/.ssh/id_ed25519*\n",[215,344,345],{"__ignoreMap":276},[280,346,347,350,353,356],{"class":282,"line":283},[280,348,349],{"class":286},"ls",[280,351,352],{"class":290}," -la",[280,354,355],{"class":294}," ~/.ssh/id_ed25519",[280,357,358],{"class":290},"*\n",[180,360,361,367],{},[183,362,363,366],{},[215,364,365],{},"id_ed25519",": File Private Key (Quyền 600 - Bảo mật tuyệt đối).",[183,368,369,372],{},[215,370,371],{},"id_ed25519.pub",": File Public Key (Có thể chia sẻ công khai).",[223,374],{},[166,376,378],{"id":377},"_3-sao-chép-public-key-lên-máy-chủ-từ-xa","3. Sao chép Public Key lên máy chủ từ xa",[237,380,382,383,386],{"id":381},"cách-1-sử-dụng-tiện-ích-ssh-copy-id-tự-động-khuyến-nghị","Cách 1: Sử dụng tiện ích ",[215,384,385],{},"ssh-copy-id"," (Tự động & Khuyến nghị)",[271,388,390],{"className":273,"code":389,"language":275,"meta":276,"style":276},"ssh-copy-id -i ~/.ssh/id_ed25519.pub devadmin@\u003CIP_MÁY_CHỦ>\n",[215,391,392],{"__ignoreMap":276},[280,393,394,396,399,402,405,409,412,416],{"class":282,"line":283},[280,395,385],{"class":286},[280,397,398],{"class":290}," -i",[280,400,401],{"class":294}," ~/.ssh/id_ed25519.pub",[280,403,404],{"class":294}," devadmin@",[280,406,408],{"class":407},"sWuGj","\u003C",[280,410,411],{"class":294},"IP_MÁY_CH",[280,413,415],{"class":414},"sFJ4l","Ủ",[280,417,418],{"class":407},">\n",[237,420,422],{"id":421},"cách-2-thiết-lập-thủ-công-áp-dụng-cho-windows-cmd-hoặc-môi-trường-hạn-chế","Cách 2: Thiết lập thủ công (Áp dụng cho Windows CMD hoặc môi trường hạn chế)",[171,424,425],{},"Đăng nhập vào VPS và chạy các lệnh:",[271,427,429],{"className":273,"code":428,"language":275,"meta":276,"style":276},"# Tạo thư mục .ssh trên máy chủ nếu chưa có\nmkdir -p ~/.ssh\nchmod 700 ~/.ssh\n\n# Mở file authorized_keys và dán nội dung id_ed25519.pub vào\nnano ~/.ssh/authorized_keys\n\n# Phân quyền bảo mật cho file authorized_keys\nchmod 600 ~/.ssh/authorized_keys\n",[215,430,431,437,449,460,467,473,482,487,493],{"__ignoreMap":276},[280,432,433],{"class":282,"line":283},[280,434,436],{"class":435},"sGGCZ","# Tạo thư mục .ssh trên máy chủ nếu chưa có\n",[280,438,440,443,446],{"class":282,"line":439},2,[280,441,442],{"class":286},"mkdir",[280,444,445],{"class":290}," -p",[280,447,448],{"class":294}," ~/.ssh\n",[280,450,452,455,458],{"class":282,"line":451},3,[280,453,454],{"class":286},"chmod",[280,456,457],{"class":290}," 700",[280,459,448],{"class":294},[280,461,463],{"class":282,"line":462},4,[280,464,466],{"emptyLinePlaceholder":465},true,"\n",[280,468,470],{"class":282,"line":469},5,[280,471,472],{"class":435},"# Mở file authorized_keys và dán nội dung id_ed25519.pub vào\n",[280,474,476,479],{"class":282,"line":475},6,[280,477,478],{"class":286},"nano",[280,480,481],{"class":294}," ~/.ssh/authorized_keys\n",[280,483,485],{"class":282,"line":484},7,[280,486,466],{"emptyLinePlaceholder":465},[280,488,490],{"class":282,"line":489},8,[280,491,492],{"class":435},"# Phân quyền bảo mật cho file authorized_keys\n",[280,494,496,498,501],{"class":282,"line":495},9,[280,497,454],{"class":286},[280,499,500],{"class":290}," 600",[280,502,481],{"class":294},[223,504],{},[166,506,508,509],{"id":507},"_4-quản-lí-hàng-chục-vps-dễ-dàng-với-file-sshconfig","4. Quản lí hàng chục VPS dễ dàng với file ",[215,510,511],{},"~/.ssh/config",[171,513,514,515,518],{},"Nếu bạn phải quản lí nhiều máy chủ với IP, cổng và tài khoản khác nhau, việc gõ lệnh ",[215,516,517],{},"ssh -p 2222 devadmin@192.168.1.100 -i ~/.ssh/key_aws"," mỗi ngày là vô cùng phiền toái.",[171,520,521,522,524],{},"Hãy cấu hình file ",[215,523,511],{}," trên máy tính cá nhân của bạn:",[271,526,528],{"className":273,"code":527,"language":275,"meta":276,"style":276},"nano ~/.ssh/config\n",[215,529,530],{"__ignoreMap":276},[280,531,532,534],{"class":282,"line":283},[280,533,478],{"class":286},[280,535,536],{"class":294}," ~/.ssh/config\n",[171,538,539],{},"Thêm các bí danh (Host Aliases) thân thiện:",[271,541,545],{"className":542,"code":543,"language":544,"meta":276,"style":276},"language-ini shiki shiki-themes github-dark github-dark github-dark","# Máy chủ Web Production\nHost web-prod\n    HostName 203.0.113.50\n    User devadmin\n    Port 2222\n    IdentityFile ~/.ssh/id_ed25519\n    ServerAliveInterval 60\n\n# Máy chủ Database nội bộ\nHost db-internal\n    HostName 10.0.0.15\n    User dbadmin\n    Port 22\n    IdentityFile ~/.ssh/id_ed25519_db\n    ProxyJump web-prod\n\n# Máy chủ Staging\nHost staging\n    HostName 198.51.100.22\n    User ubuntu\n    IdentityFile ~/.ssh/id_ed25519\n","ini",[215,546,547,552,557,562,567,572,577,582,586,591,597,603,609,615,621,627,632,638,644,650,656],{"__ignoreMap":276},[280,548,549],{"class":282,"line":283},[280,550,551],{},"# Máy chủ Web Production\n",[280,553,554],{"class":282,"line":439},[280,555,556],{},"Host web-prod\n",[280,558,559],{"class":282,"line":451},[280,560,561],{},"    HostName 203.0.113.50\n",[280,563,564],{"class":282,"line":462},[280,565,566],{},"    User devadmin\n",[280,568,569],{"class":282,"line":469},[280,570,571],{},"    Port 2222\n",[280,573,574],{"class":282,"line":475},[280,575,576],{},"    IdentityFile ~/.ssh/id_ed25519\n",[280,578,579],{"class":282,"line":484},[280,580,581],{},"    ServerAliveInterval 60\n",[280,583,584],{"class":282,"line":489},[280,585,466],{"emptyLinePlaceholder":465},[280,587,588],{"class":282,"line":495},[280,589,590],{},"# Máy chủ Database nội bộ\n",[280,592,594],{"class":282,"line":593},10,[280,595,596],{},"Host db-internal\n",[280,598,600],{"class":282,"line":599},11,[280,601,602],{},"    HostName 10.0.0.15\n",[280,604,606],{"class":282,"line":605},12,[280,607,608],{},"    User dbadmin\n",[280,610,612],{"class":282,"line":611},13,[280,613,614],{},"    Port 22\n",[280,616,618],{"class":282,"line":617},14,[280,619,620],{},"    IdentityFile ~/.ssh/id_ed25519_db\n",[280,622,624],{"class":282,"line":623},15,[280,625,626],{},"    ProxyJump web-prod\n",[280,628,630],{"class":282,"line":629},16,[280,631,466],{"emptyLinePlaceholder":465},[280,633,635],{"class":282,"line":634},17,[280,636,637],{},"# Máy chủ Staging\n",[280,639,641],{"class":282,"line":640},18,[280,642,643],{},"Host staging\n",[280,645,647],{"class":282,"line":646},19,[280,648,649],{},"    HostName 198.51.100.22\n",[280,651,653],{"class":282,"line":652},20,[280,654,655],{},"    User ubuntu\n",[280,657,659],{"class":282,"line":658},21,[280,660,576],{},[171,662,663],{},"Bây giờ, để kết nối vào máy chủ Web Production, bạn chỉ cần gõ duy nhất:",[271,665,667],{"className":273,"code":666,"language":275,"meta":276,"style":276},"ssh web-prod\n",[215,668,669],{"__ignoreMap":276},[280,670,671,673],{"class":282,"line":283},[280,672,117],{"class":286},[280,674,675],{"class":294}," web-prod\n",[171,677,678],{},"SSH Client sẽ tự động lấy đúng IP, Port, User và File khóa để kết nối tức thì!",[223,680],{},[166,682,684],{"id":683},"_5-tự-động-lưu-passphrase-với-ssh-agent","5. Tự động lưu Passphrase với SSH Agent",[171,686,687,688,691],{},"Để không phải nhập lại Passphrase mỗi lần kết nối SSH trong phiên làm việc, bạn có thể nạp khóa vào ",[175,689,690],{},"ssh-agent",":",[271,693,695],{"className":273,"code":694,"language":275,"meta":276,"style":276},"# Khởi động ssh-agent\neval \"$(ssh-agent -s)\"\n\n# Nạp khóa vào bộ nhớ RAM của agent\nssh-add ~/.ssh/id_ed25519\n",[215,696,697,702,718,722,727],{"__ignoreMap":276},[280,698,699],{"class":282,"line":283},[280,700,701],{"class":435},"# Khởi động ssh-agent\n",[280,703,704,707,710,712,715],{"class":282,"line":439},[280,705,706],{"class":290},"eval",[280,708,709],{"class":294}," \"$(",[280,711,690],{"class":286},[280,713,714],{"class":290}," -s",[280,716,717],{"class":294},")\"\n",[280,719,720],{"class":282,"line":451},[280,721,466],{"emptyLinePlaceholder":465},[280,723,724],{"class":282,"line":462},[280,725,726],{"class":435},"# Nạp khóa vào bộ nhớ RAM của agent\n",[280,728,729,732],{"class":282,"line":469},[280,730,731],{"class":286},"ssh-add",[280,733,734],{"class":294}," ~/.ssh/id_ed25519\n",[171,736,737,738,740],{},"Trên macOS, bạn có thể thêm cấu hình sau vào ",[215,739,511],{}," để Keychain tự động nhớ Passphrase vĩnh viễn:",[271,742,744],{"className":542,"code":743,"language":544,"meta":276,"style":276},"Host *\n    AddKeysToAgent yes\n    UseKeychain yes\n    IdentityFile ~/.ssh/id_ed25519\n",[215,745,746,751,756,761],{"__ignoreMap":276},[280,747,748],{"class":282,"line":283},[280,749,750],{},"Host *\n",[280,752,753],{"class":282,"line":439},[280,754,755],{},"    AddKeysToAgent yes\n",[280,757,758],{"class":282,"line":451},[280,759,760],{},"    UseKeychain yes\n",[280,762,763],{"class":282,"line":462},[280,764,576],{},[223,766],{},[166,768,770],{"id":769},"_6-vô-hiệu-hóa-hoàn-toàn-xác-thực-mật-khẩu-trên-máy-chủ","6. Vô hiệu hóa hoàn toàn xác thực Mật khẩu trên máy chủ",[171,772,773],{},"Sau khi đã kiểm tra đăng nhập bằng SSH Key thành công, hãy khóa hoàn toàn cửa sau (Password Authentication) trên máy chủ:",[171,775,776,777,780],{},"Mở file ",[215,778,779],{},"/etc/ssh/sshd_config"," trên VPS:",[271,782,784],{"className":273,"code":783,"language":275,"meta":276,"style":276},"sudo nano /etc/ssh/sshd_config\n",[215,785,786],{"__ignoreMap":276},[280,787,788,791,794],{"class":282,"line":283},[280,789,790],{"class":286},"sudo",[280,792,793],{"class":294}," nano",[280,795,796],{"class":294}," /etc/ssh/sshd_config\n",[171,798,799],{},"Đảm bảo các giá trị sau:",[271,801,803],{"className":542,"code":802,"language":544,"meta":276,"style":276},"PasswordAuthentication no\nChallengeResponseAuthentication no\nPermitEmptyPasswords no\nPubkeyAuthentication yes\n",[215,804,805,810,815,820],{"__ignoreMap":276},[280,806,807],{"class":282,"line":283},[280,808,809],{},"PasswordAuthentication no\n",[280,811,812],{"class":282,"line":439},[280,813,814],{},"ChallengeResponseAuthentication no\n",[280,816,817],{"class":282,"line":451},[280,818,819],{},"PermitEmptyPasswords no\n",[280,821,822],{"class":282,"line":462},[280,823,824],{},"PubkeyAuthentication yes\n",[171,826,827],{},"Kiểm tra cú pháp và khởi động lại SSH daemon:",[271,829,831],{"className":273,"code":830,"language":275,"meta":276,"style":276},"sudo sshd -t\nsudo systemctl restart ssh\n",[215,832,833,843],{"__ignoreMap":276},[280,834,835,837,840],{"class":282,"line":283},[280,836,790],{"class":286},[280,838,839],{"class":294}," sshd",[280,841,842],{"class":290}," -t\n",[280,844,845,847,850,853],{"class":282,"line":439},[280,846,790],{"class":286},[280,848,849],{"class":294}," systemctl",[280,851,852],{"class":294}," restart",[280,854,855],{"class":294}," ssh\n",[223,857],{},[166,859,861],{"id":860},"bảng-tổng-kết-phân-quyền-thư-mục-ssh","Bảng tổng kết phân quyền thư mục SSH",[171,863,864],{},"Phân quyền không đúng trên Linux sẽ khiến SSH từ chối nhận khóa vì lí do an toàn. Hãy luôn nhớ bảng quyền sau:",[866,867,868,888],"table",{},[869,870,871],"thead",{},[872,873,874,879,882,885],"tr",{},[875,876,878],"th",{"align":877},"left","Thư mục / Tệp tin",[875,880,881],{"align":877},"Vị trí",[875,883,884],{"align":877},"Phân quyền bắt buộc",[875,886,887],{"align":877},"Lệnh thiết lập",[889,890,891,917,940,962,983],"tbody",{},[872,892,893,899,902,912],{},[894,895,896],"td",{"align":877},[215,897,898],{},"~/.ssh/",[894,900,901],{"align":877},"Cả Client & Server",[894,903,904,907,908,911],{"align":877},[215,905,906],{},"700"," (",[215,909,910],{},"rwx------",")",[894,913,914],{"align":877},[215,915,916],{},"chmod 700 ~/.ssh",[872,918,919,924,927,935],{},[894,920,921,923],{"align":877},[215,922,365],{}," (Private)",[894,925,926],{"align":877},"Máy Client cá nhân",[894,928,929,907,932,911],{"align":877},[215,930,931],{},"600",[215,933,934],{},"rw-------",[894,936,937],{"align":877},[215,938,939],{},"chmod 600 ~/.ssh/id_ed25519",[872,941,942,947,949,957],{},[894,943,944,946],{"align":877},[215,945,371],{}," (Public)",[894,948,926],{"align":877},[894,950,951,907,954,911],{"align":877},[215,952,953],{},"644",[215,955,956],{},"rw-r--r--",[894,958,959],{"align":877},[215,960,961],{},"chmod 644 ~/.ssh/id_ed25519.pub",[872,963,964,969,972,978],{},[894,965,966],{"align":877},[215,967,968],{},"authorized_keys",[894,970,971],{"align":877},"Máy Server từ xa",[894,973,974,907,976,911],{"align":877},[215,975,931],{},[215,977,934],{},[894,979,980],{"align":877},[215,981,982],{},"chmod 600 ~/.ssh/authorized_keys",[872,984,985,989,991,997],{},[894,986,987],{"align":877},[215,988,511],{},[894,990,926],{"align":877},[894,992,993,907,995,911],{"align":877},[215,994,931],{},[215,996,934],{},[894,998,999],{"align":877},[215,1000,1001],{},"chmod 600 ~/.ssh/config",[223,1003],{},[166,1005,1007],{"id":1006},"lời-kết","Lời kết",[171,1009,1010,1011,1013],{},"Sử dụng SSH Key với thuật toán Ed25519 kết hợp file cấu hình ",[215,1012,511],{}," là tiêu chuẩn vàng của mọi kĩ sư DevOps chuyên nghiệp. Bạn vừa nâng tầm bảo mật cho máy chủ của mình lên mức tối đa, vừa tiết kiệm được rất nhiều thời gian đăng nhập mỗi ngày.",[1015,1016,1017],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html pre.shiki code .sb7EE, html code.shiki .sb7EE{--shiki-default:#B392F0;--shiki-dark:#B392F0;--shiki-light:#B392F0}html pre.shiki code .sKJT9, html code.shiki .sKJT9{--shiki-default:#79B8FF;--shiki-dark:#79B8FF;--shiki-light:#79B8FF}html pre.shiki code .skqr8, html code.shiki .skqr8{--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF;--shiki-light:#9ECBFF}html pre.shiki code .sWuGj, html code.shiki .sWuGj{--shiki-default:#F97583;--shiki-dark:#F97583;--shiki-light:#F97583}html pre.shiki code .sFJ4l, html code.shiki .sFJ4l{--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8;--shiki-light:#E1E4E8}html pre.shiki code .sGGCZ, html code.shiki .sGGCZ{--shiki-default:#6A737D;--shiki-dark:#6A737D;--shiki-light:#6A737D}",{"title":276,"searchDepth":439,"depth":439,"links":1019},[1020,1021,1024,1025,1030,1032,1033,1034,1035],{"id":168,"depth":439,"text":169},{"id":227,"depth":439,"text":228,"children":1022},[1023],{"id":239,"depth":451,"text":240},{"id":265,"depth":439,"text":266},{"id":377,"depth":439,"text":378,"children":1026},[1027,1029],{"id":381,"depth":451,"text":1028},"Cách 1: Sử dụng tiện ích ssh-copy-id (Tự động & Khuyến nghị)",{"id":421,"depth":451,"text":422},{"id":507,"depth":439,"text":1031},"4. Quản lí hàng chục VPS dễ dàng với file ~/.ssh/config",{"id":683,"depth":439,"text":684},{"id":769,"depth":439,"text":770},{"id":860,"depth":439,"text":861},{"id":1006,"depth":439,"text":1007},[9,14],false,"md",{"src":120,"alt":121},{},{"title":113,"description":114},null,"ssh-key-authentication","posts/ssh-key-authentication",[117,10,15],"2026-08-22","5GFIjDSvie",[1049,1054,1059,1064,1069,1074,1079,1084,1089,1093,1098,1103],{"path":5,"title":6,"categories":1050,"tags":1051,"date":16,"draft":1037,"slug":1052,"description":7,"image":1053},[9,10],[12,13,14,15],"incident-checklist",{"src":18,"alt":19},{"path":21,"title":22,"categories":1055,"tags":1056,"date":31,"draft":1037,"slug":1057,"description":23,"image":1058},[25,26],[28,29,30,10],"backup-postgres-docker",{"src":33,"alt":34},{"path":36,"title":37,"categories":1060,"tags":1061,"date":44,"draft":1037,"slug":1062,"description":38,"image":1063},[25,10],[41,42,43],"docker-compose-production",{"src":46,"alt":47},{"path":49,"title":50,"categories":1065,"tags":1066,"date":58,"draft":1037,"slug":1067,"description":51,"image":1068},[9,10],[54,55,56,57],"monitoring-server-basics",{"src":60,"alt":61},{"path":63,"title":64,"categories":1070,"tags":1071,"date":71,"draft":1037,"slug":1072,"description":65,"image":1073},[9,67],[10,69,70],"nginx-reverse-proxy",{"src":73,"alt":74},{"path":76,"title":77,"categories":1075,"tags":1076,"date":83,"draft":1037,"slug":1077,"description":78,"image":1078},[9,14],[81,82,10],"how-to-secure-a-vps",{"src":85,"alt":86},{"path":88,"title":89,"categories":1080,"tags":1081,"date":95,"draft":1037,"slug":1082,"description":90,"image":1083},[9,10],[93,94,43,41],"systemd-node-service",{"src":97,"alt":98},{"path":100,"title":101,"categories":1085,"tags":1086,"date":107,"draft":1037,"slug":1087,"description":102,"image":1088},[9,25],[105,10,106],"how-to-install-docker-on-ubuntu-server",{"src":109,"alt":110},{"path":112,"title":113,"categories":1090,"tags":1091,"date":118,"draft":1037,"slug":1043,"description":114,"image":1092},[9,14],[117,10,15],{"src":120,"alt":121},{"path":123,"title":124,"categories":1094,"tags":1095,"date":131,"draft":1037,"slug":1096,"description":125,"image":1097},[9,14],[128,129,130,15],"ufw-firewall-basics",{"src":133,"alt":134},{"path":136,"title":137,"categories":1099,"tags":1100,"date":145,"draft":1037,"slug":1101,"description":138,"image":1102},[140,10],[142,143,144,30],"git-deploy-key",{"src":147,"alt":148},{"path":150,"title":151,"categories":1104,"tags":1105,"date":155,"draft":1037,"slug":1106,"description":152,"image":1107},[9],[106,105,15],"ubuntu-server-initial-setup",{"src":157,"alt":158},[],1789616168151]