Mấy Tips vớ vẩn giúp cho SSH bớt chán ngắt hơn
ssh
13
tips
18
White

Hùng Phong viết ngày 16/12/2018

Thương hiệu quen thuộc của mình mỗi khi bắt đầu một bài viết nghiêm túc nào luôn là một tràng dài dòng vớ vẩn tạm gọi là xả bớt nỗi lòng, tất nhiên ít nhiều có liên quan đến nội dung. Có hai điều mình muốn nói:

Hai lý do chính để mình luôn nộp CV vào vị trí Frontend Developer thay vì Fullstack Developer, mình không thích lắm việc mình làm một công việc gì đấy chỉ vì mình có khả năng, mà phải đi kèm với việc mình có niềm cảm hứng bất tận cho nó nữa. Các cậu biết lựa chọn của một thằng yêu thích mảng Design UI/UX là gì rồi đó. Mình lại không dám chơi liều, nhỡ đâu liều mạng submit vào vị trí fullstack rồi lại đối mặt với những task quá sức hiểu biết vốn chỉ dừng lại ở mức đủ để code frontend nhanh gọn lẹ nhất, thì khổ mình, khổ công ty. Mình sẵn sàng vỗ ngực tự cao là một thằng ham học hỏi không ngại gì, nhưng không học hỏi một cách ngu ngốc. Có một công ty kín vị trí js developer, chào mời mình vào vị trí java/scala developer, mình từ chối luôn dù lương quá hấp dẫn. Thế mạnh của mình là JS, mình chỉ muốn focus 100% vào nó thôi.

Mình hay nói thế này, nghề coder có nhiều thứ trái khoáy so với những nghề khác. Nó có thể hại não và khó nhằn, nhưng nó cuốn hút mình vì mình là một thằng lười đúng nghĩa. Một góc nhìn nào đó, lười biếng là tố chất cần phải có của một Developer cầu tiến. Một kẻ lười biếng sẽ không bao giờ cho phép guồng quay công việc của mình cứ lặp đi lặp lại ngày qua ngày giống hệt nhau. Hôm nay bạn gõ lệnh SSH phải mất tới 20s vì cố nhớ xem mình vừa đổi sang cổng gì, rồi lại lằng nhằng gõ IP với user, ngày mai hay ngày kia phải cố mà chỉ tốn 1-2s cho công việc đó.

Bắt đầu chia sẻ thôi.

alt text

How to SSH an toàn hơn?

Mình rất ghét việc SSH bằng một tài khoản khác rồi cứ phải lặp đi lặp lại cái cụm "sudo". Hễ lặp lại hoài là mình nản. Trừ khi sử dụng server của công ty, nơi mà cái tính lười của bạn k đc phép đi xa hơn yếu tố an toàn của hệ thống, còn lại, ví dụ như bạn điều khiển VPS của chính mình, tại sao lại không đăng nhập hẳn vào tài khoản root luôn?

Nhưng một điều khác mình k cần giải thích nhiều, root cũng chính là tài khoản nhạy cảm nhất và mọi tình huống để lộ quyền truy cập vào tài khoản root đều VÔ CÙNG NGUY HIỂM. Android muốn jailbreak cũng phải đăng nhập được vào root khiến nó trở nên mong manh hơn trước hacker kia mà. Nhiều tình huống xảy ra khi để lộ quyền truy cập vào tài khoản root lắm, mình đã từng dính rồi, bất chấp setup mật khẩu 16 kí tự xen lẫn kí tự đặc biệt. VPS của mình bị biến thành máy đào bitcoin, CPU hoạt động liên tục ở ngưỡng 100% và... sập liên tục. Hậu quả là, chuyển nhà sang VPS khác!

Sau những chuyện như thế thì mình khá là coi trọng việc bảo mật cho VPS của mình. Mớ tài sản đang lưu trữ trên đó quy ra tiền cũng hơi bị bự.

Đăng nhập bằng public key, chặn phương thức mật khẩu

Trong giới hạn bài viết này mọi thao tác đều thực hiện thuần tuý qua SSH. Mình cũng không rõ là có những webpanel nào cho phép mình thực hiện mấy vụ này dễ dàng hơn không, có một tình huống hơi tréo ngoe, cuối section mình sẽ chia sẻ.

Kĩ thuật này mình hay gọi là "một mũi tên trúng hai đích". Vừa giữ được tài khoản root trở nên an toàn, vừa làm hài lòng những thánh lười vì bớt được vụ nhập mật khẩu. Ahihi :)) An toàn ở chỗ, chấp hết bố con thằng nào dùng siêu máy tính để mò được mật khẩu tài khoản root. Đổi lại nhớ giữ key trong máy an toàn là được, nếu để mất lap, lo mà xoá key trên server ngay.

Đầu tiên là tắt phương thức đăng nhập bằng mật khẩu. Mở file /etc/ssh/sshd_config lên và chỉnh sửa lại như sau:

PasswordAuthentication no
RSAAuthentication yes
PubkeyAuthentication yes

Reload lại SSH service lại là xong.

$ /etc/init.d/ssh reload

Từ đây toàn bộ các tài khoản trên server đều bắt buộc phải đăng nhập bằng public key. Nếu muốn chỉ áp dụng riêng cho từng tài khoản, thì... google đi mình lười viết quá.

Bước tiếp theo, xác thực máy tính cá nhân mà bạn đang sử dụng với server.

Trên Mac OS/Ubuntu hay mấy hệ điều hành Linux tương tự

1/ Google cái này cũng ra nhiều lắm nhưng bất chợt mình siêng nên mình sẽ viết vậy. Đầu tiên, kiểm tra xem đã tồn tại file id_rsa.pub trong máy tính chưa

$ cat ~/.ssh/id_rsa.pub

Nếu đã có, copy nội dung public key rồi nhảy sang bước 3. Chưa có thì, bước 2 thẳng tiến.
2/ Khởi động trình tạo key bằng lệnh

$ ssh-keygen -t rsa

Một loạt câu hỏi sẽ bắt đầu từ đây. Lưu file vào đâu? Enter luôn đi để mặc định lưu vào ~/.ssh/id_rsa (private key) và ~/.ssh/id_rsa.pub (public key). Nhập passphrase cho key? Có thể để trống mà enter luôn cũng được nhưng bảo mật mà, mình vẫn nhập một cái pass quen thuộc đủ khó đoán với người khác. Kết thúc việc tạo key, console sẽ output như dưới đây, đại loại là thế

Your identification has been saved in /Users/user/.ssh/id_rsa.
Your public key has been saved in /Users/user/.ssh/id_rsa.pub.
The key fingerprint is:
ae:89:72:0b:85:da:5a:f4:7c:1f:c2:43:fd:c6:44:38 user@mymac.local
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|         .       |
|        E .      |
|   .   . o       |
|  o . . S .      |
| + + o . +       |
|. + o = o +      |
| o...o * o       |
|.  oo.o .        |
+-----------------+

Quay lại bước 1 thôi.
3/ SSH vào tài khoản root trên server (nên làm vụ này trước khi tắt đăng nhập mật khẩu kẻo lại kêu trời vì không SSH được), mở file ~/.ssh/authorized_keys lên, paste cái key vừa copy trước đó vào dòng cuối cùng rồi :wq để lưu lại là xong. Vim thì mấy bạn biết dùng rồi t không cần hướng dẫn dài dòng, chưa thì google.
Sau bước này, thử đôi lại phương thức đăng nhập như hướng dẫn ở trên, rồi thoát server, đăng nhập lại lần nữa bằng $ ssh user@host-name-or-ip. Tada! Khỏi nhập mật khẩu, vào phát luôn~

An toàn là ở chỗ, chỉ duy nhất máy tính của bạn đăng nhập được vào server. Nếu muốn đăng nhập trên máy khác, tạo key trên máy đó rồi tìm cách để thêm key vào ~/.ssh/authorized_keys trên server là được. Tự viết một trang PHP nho nhỏ chạy quyền root cho phép tuỳ ý đọc/ghi file authorized_keys chẳng hạn.

Trên Windows

Đọc ở đây đi nè. Nhiều quá lười viết arghhhhhh...

Mình thường làm việc trên Mac OS/Linux nên trong giới hạn bài viết này thao tác của mình cũng sẽ là hướng dẫn trên Mac OS thôi. Còn Windows thì google chắc là không thiếu đâu.

Đổi cổng SSH mặc định (22)

Mọi thằng mất dạy khi tìm cách tấn công vào tài khoản root của SSH, đương nhiên tụi nó sẽ bắt đầu từ cổng 22 vốn là cổng mặc định của SSH. Tất nhiên sau quá trình thay đổi phương thức đăng nhập, server của bạn đã trở nên an toàn hơn, nhưng để an toàn hơn nữa, đổi luôn cổng này đi để tránh con mắt dòm ngó của vô số kẻ xấu trên mạng internet vốn dĩ thượng vàng hạ cám.

So sánh cho vui thì việc thay đổi phương thức đăng nhập giống như việc lắp cho ngôi nhà của bạn một ổ khoá to nặng hơn (bố thách mày phá khoá nhà bố đấy), còn việc thay đổi cổng giống như việc giấu tiệt địa chỉ ngôi nhà luôn (chúc mày tìm ra được nhà bố để mà thó đồ vui vẻ, haha). Combo luôn 2 biện pháp bảo mật đương nhiên phải tốt hơn một rồi.

Cũng đơn giản không kém. Tiếp tục login SSH với tài khoản root, mở file /etc/ssh/sshd_config lên, tìm dòng Port 22 và sửa lại bằng một con số khó đoán khác. Nhớ đảm bảo không dùng lẫn mấy cái port khác đang hoạt động ví dụ http 80 hoặc 443, mongodb 27017 hay redis 6379 nha!

Port 2218 # ví dụ vậy

Nếu VPS có thiết lập tường lửa, hãy mở tường lửa cho cổng SSH mới này. Thực hiện tuần tự các bước dưới đây
1/ Stop IPTables

$ service iptables stop

2/ Mở cổng 2218 và chặn cổng 22 mặc định

$ iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 2218 -j ACCEPT
$ iptables -A INPUT -p tcp --dport 22 -j DROP
$ iptables save

3/ Khởi động lại iptables

$ /etc/init.d/sshd restart
$ /etc/init.d/iptables restart

Ngay sau bước này, lệnh ssh vào server với cổng mới sẽ trở thành ssh -p 2218 root@what.the.fuck rồi nhé. Bắt đầu cảm thấy việc phải gõ như thế mệt mỏi chưa? Nếu rồi, đọc tiếp phần dưới đây!

Rút gọn lệnh đăng nhập SSH bằng SSH Config

Tips này rất có ích nếu bạn thường xuyên phải đăng nhập SSH nhiều hơn một server và đương nhiên phải nhớ tài khoản lẫn mật khẩu và hostname hay cổng từ 3 cái trở lên quá sức... mệt mỏi. SSH Config ra đời để gán cho mỗi server cần đăng nhập một cái alias, nhân tiện setup giùm luôn những thông số cần thiết mà không phải tự gõ tay nữa.

Tạo hoặc mở file ~/.ssh/config (trong máy tính cá nhân của bạn) lên, và chỉnh sửa nội dung trông na ná như dưới đây

$ vi ~/.ssh/config

Host servercuatao
    HostName what.the.fuck
    Port 2218
    User root
    IdentityFile  ~/.ssh/id_rsa
    IdentitiesOnly yes

Host servercuabangaitao
    HostName 192.168.33.10
    User anotheruser
    PubkeyAuthentication no

How aws
    HostName some.address.ec2.aws.com
    User awsuser
    IdentityFile  ~/.ssh/aws_identity.pem
    IdentitiesOnly yes

Save lại, và từ giờ mỗi khi ssh, câu lệnh lắm thứ khó nhớ ở mục trên đã được rút gọn lại chỉ còn ssh servercuatao là xong. Không giới hạn số server được thêm vào bên trong file ~/.ssh/config.

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Hùng Phong

4 bài viết.
28 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
12 6
Mình có đề trong CV là mình có kinh nghiệm ở mức tương đối vì UI/UX, dù không phải là một fulltime designer, đúng là có biết sử dụng Photoshop, Ske...
Hùng Phong viết 8 tháng trước
12 6
White
8 0
_Có mấy chia sẻ nhỏ, mình muốn đưa ra để mọi người cùng thảo luận góp ý. Thread này không tập trung vào Technical nữa mà discuss về Coding Style & ...
Hùng Phong viết 8 tháng trước
8 0
White
1 2
Tất nhiên đây chỉ là một trick không hề được khuyến khích áp dụng vào bất cứ một dự án Company nào (vốn đòi hỏi yêu cầu bảo mật và an toàn dữ liệu ...
Hùng Phong viết 8 tháng trước
1 2
Bài viết liên quan
White
3 2
Giới thiệu Loay hoay cài Intellij trên CentOS 7 với Gnome, gặp 2 vấn đề thú vị nên viết lại cho bạn nào gặp phải thì nhanh chóng giải quyết được v...
Bùi Hồng Hà viết hơn 3 năm trước
3 2
White
1 2
Tất nhiên đây chỉ là một trick không hề được khuyến khích áp dụng vào bất cứ một dự án Company nào (vốn đòi hỏi yêu cầu bảo mật và an toàn dữ liệu ...
Hùng Phong viết 8 tháng trước
1 2
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
4 bài viết.
28 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!