Chủ nhật, ngày 9 tháng 8 năm 2020
Trang chủ Thủ thuật

Cải thiện tốc độ login SSH trên Linux nhanh nhất

Environment

- Desktop: Ubuntu 16.04.2 LTS 

- ssh client: openssh-client 1:7.2p2–4ubuntu2.2 

- Remote Server: CentOS 7 

- ssh server: openssh-server-6.6.1p1–23.el7_2.x86_64  

Có rất nhiều yếu tố khiến cho đăng nhập SSH đến một remote machine trở nên chậm chạp. Trong bài đăng này, chúng ta sẽ đề cập đến một vài yếu tố trong đó.

Đầu tiên, chúng ta nên đo lường sự chậm chạp này bằng một lệnh single-shot ssh chạy ngay lập tức trên remote machine và thoát ra:

$ time ssh -l root uname -r

3.10.0-327.36.3.el7.x86_64


real 0m15.577s

user 0m0.016s

sys 0m0.000s

Mất 15 giây để SSH kết nối vào máy nằm trong cùng thành phố, khi cả laptop và remote server được kết nối với đường Internet cực nhanh.

Chúng ta có thể tìm xem hoạt động nào đang mất thời gian bằng cách chạy lệnh ssh trong debug mode:

$ ssh -l root -v 

Điều này tạo ra rất nhiều output, và trong trường hợp này, đã bị treo trong một thời gian dài tại thông điệp này:

debug1: Unspecified GSS failure. Minor code may provide more information

No Kerberos credentials available

Chúng tôi không sử dụng Kerberos và GSSAPI authentication trên các máy chủ, vì vậy tôi sẽ vô hiệu hóa nó. Trên remote machine, chỉnh sửa sshd configuration file (/etc/ssh/sshd_config trên CentOS) và thay đổi.

GSSAPIAuthentication yes

thành:

GSSAPIAuthentication no

Sau đó, tải lại sshd:

# systemctl reload sshd

Bây giờ, thông báo "Unspecified GSS failure" biến mất nhưng kết nối vẫn bị treo một chút và mất một khoảng thời gian để đưa ra shell trên remote machine.

Tiếp theo, chúng tôi kiểm tra một yếu tố nổi tiếng trong hầu hết các vấn đề làm chậm kết nối mạng: DNS Lookups, hay còn gọi là reverse DNS lookups.

# man sshd_config | grep -A1 "look up"

                        Specifies a program to be used to look up the user's public keys. The program must be owned by root and not writable by group or others. It will be invoked with a single

                        argument of the username being authenticated, and should produce on standard output zero or more lines of authorized_keys output (see AUTHORIZED_KEYS in sshd(8)). If a key--

            UseDNS Specifies whether sshd(8) should look up the remote host name and check that the resolved host name for the remote IP address maps back to the very same IP address. Thedefault is "yes". 

Chúng ta hãy kiểm tra tệp cấu hình sshd cho tham số UseDNS:

# grep UseDNS /etc/ssh/sshd_config

UseDNS yes

Thay đổi thành no.

# grep UseDNS /etc/ssh/sshd_config

UseDNS no

và tải lại sshd và thử kết nối lại:

$ time ssh -l root uname -r

3.10.0-327.36.3.el7.x86_64


real 0m0.323s

user 0m0.008s

sys 0m0.008s

Các thao tác trên đã giảm thời gian đăng nhập từ hơn 15 giây xuống dưới nửa giây.

Reverse lookups là một vấn đề bất cứ khi nào bạn sử dụng những thứ như personal laptop mà thường không có reverse DNS name liên kết với nó.

Chúc các bạn thành công!

Dịch từ: blog.devcloud.hosting/speed-up-slow-ssh-login-on-linux-bc1ce10fcf3

>> Có thể bạn quan tâm: Sửa nhanh lỗi "Authentication token is no longer valid" trên Linux