Sunday, November 18, 2018

Hướng Dẫn Sử Dụng SSH (Part 1)

Hi các bạn, hôm nay rãnh mình xin làm một seri về SSH, mình không biết các bạn đã biết về SSH hết chưa? Vì khi mình đi làm trc kia thật sự mình cũng không biết, và công ty hiện tại mình đi làm mấy anh developer lâu lâu cũng "không nhớ".

Nên mình xin mạng phép làm một cái hướng cơ bản đến nâng cao một chút xíu để các bạn có thể sử dụng thành thạo cũng như ứng dụng vào việc coding tốt hơn như mình.


Trước tiên phải biết SSH là gì?

ssh (SSH client) là một chương trình để đăng nhập vào một máy từ xa và thực hiện các lệnh trên một máy từ xa.
      Nó được thiết kế để cung cấp thông tin liên lạc được mã hóa an toàn giữa hai máy chủ không đáng tin cậy trên một mạng không an toàn.
      Các kết nối X11, các cổng TCP tùy ý và các ổ cắm miền UNIX cũng có thể được chuyển tiếp qua kênh bảo mật.

Các Opsion:
ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec] [-D [bind_address:]port] [-E log_file]
         [-e escape_char] [-F configfile] [-I pkcs11] [-i identity_file] [-L address] [-l login_name] [-m mac_spec]
         [-O ctl_cmd] [-o option] [-p port] [-Q query_option] [-R address] [-S ctl_path] [-W host:port]
         [-w local_tun[:remote_tun]] [user@]hostname [command]

Demo vài lệnh

1. SSH thông thường
ssh h6009.blogspot.com
Port mặc định khi mình gõ câu lệnh trên nó sẽ làm việc gì?

- Nếu bạn không khai báo cho nó -p portnumber thì nó sẽ ngầm hiểm rằng port mặc định của SSH là 22 (Nếu port này chưa mở thì ssh trên máy bạn (ssh-client) sẽ không thể kết nối tới được server (SSH-server).
Note: Server phải cài đặt Openssh-server và open port sao cho ssh-client có thể kết nối tới

- Nếu mình không khai báo User, nó sẽ tự hiểu là username trên máy tính của mình.

Ví dụ : thuynga-hp@DESKTOP-6S7IVKH

=> username sẽ là thuynga-hp

Cho nên full cấu trúc nếu bạn không muốn sử dụng mặc định trên máy thì bạn sẽ sử dụng như sau:

ssh username@ipserverhoacdomain -p port_number

Ví dụ:


ssh h6009@123.123.213.123 -p 6009


2. SSH có private key / làm việc với public key
Xem video nha. Uploading...
Như các bạn đã thấy. Mình login vào server không cần password. Rõ ràng lúc nào cũng phải nhập mật khẩu thì thật là phiền phức. Thật vậy, việc nhập mật khẩu để đăng nhập SSH là rất hiếm đó. SSH rất quan trọng.

Sỡ dĩ mình đăng nhập mà không cần password đó chính là vì trên user mình đang kết nối đã có public_key của mình.
$ cat ~/.ssh/authorized_keys

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDwiuMMz0mix2FjtE1FiyCD235ytEWUh6nD4TYMy8JayCG8qhSuDlh0doK0y12bbVLf4u3vZzIPQI+Iw1GmBaTDvulAk/wYZg5R2lHKvXAQAHciDoMoQFXJHxsLumN3FcqLAAP94m8poDXLD9Urgr/Wili17MHMHoaTX/6DRdjA0Av3iw/juQBV120GzXC5ktZlK3ooC23AiDcV4lMBA9vAcXeQ8YtdIohC70GmvvAsPhaUSHu1vF4nYeeskAtj+HiNQImZV39bQ/k/yFQJVDf3mAAbsijcojHJoHQ2+d/ZbaBsG/kOS7s8n6aA/K4L4tRSKdXqb//xzFmnB3syMuWT thuynga-hp@DESKTOP-6S7IVKH

Bạn chỉ cần add key nào vào bất kỳ máy chủ nào, đúng path của user bạn đang kết nối thì bạn sẽ login vào được mà không cần password.

Ví dụ: Mình đang cần login vào username h6009 trên máy chủ. Một máy chủ thì có rất nhiều username khác nhau có phải không. Nên chúng ta cần phải add chính xác.
$ pwd
/home/h6009/.ssh/authorized_keys
Mặc định nó sẽ không có folder .ssh đâu. Bạn cần phải tạo nó bằng tay hoặc tạo Private Key và Public_key bằng lệnh ssh_keygen.

$ ssh-keygen

Generating public/private rsa key pair.
Enter file in which to save the key (/home/h6009/.ssh/id_rsa): 
Mình sẽ không nhập gì cả, enter thôi để nó mặc định là id_rsa.

Password thì bạn có thể nhập password của bạn vào. Password này sẽ dùng để đăng nhập vào con server thay vì mật khẩu của user nhé. 
Còn như mình để trống thì khỏi phải nhập gì cả. SSH thì nó vào luôn.

- Private key (id_rsa) là key máy tính bạn dùng để truy cập vào máy chủ xem có trùng với public key trên máy server không.

- Public key (id_rsa.pub) là key bạn add vào trên server, đúng folder .ssh của user mà bạn đang cần kết nối tới.

+ Bạn có thể add vào bằng tay public trong file authorized_keys hoặc ssh-copy-id nhé.

Note: Nếu file authorized_keys chưa có thì bạn có thể tạo. Nhưng nhớ chmod phân quyền tử tế, để người ta sử lung tung hay nhìn thấy. Còn không biết thì cứ để mặc định cũng được. Vì mặc định của nó là 644 (trường trong group và other sẽ xem được đó).

+ Để tạo được 2 keys (Public và Private) thì bạn có thể làm 2 cách.

* Dùng ssh-copy-id - Không biết thì có thể ssh-copy-id --help xem nào 
* Dùng ssh-keygen - Không biết thì có thể ssh-keygen --help xem nào.

3. Khai báo trong config cho SSH

Việc nhập username, IP và cả port quá là khó khăn và thật không dễ nhớ tí nào cả. Thì qua Config. Bạn sẽ có thể dễ dàng hơn trong việc SSH.

ssh h6009@123.321.123.321 -p 6009


vi ~/.ssh/config
host h6009-host #tên ssh bạn sẽ dùng để ssh tới
hostname 123.321.123.321 #Bạn cũng có thể nhập domain trỏ đến IP này
user h6009 #username bạn muốn SSH tới
port 2512  #Port bạn muốn ssh tới

4. Trouble Shoot khi ssh không thành công.
ssh -vvv hacker6009.blogspot.com -p 6009 

Youtube : Uploading...

"-v" có nghĩa là verbose. Bạn sẽ thấy được debug của SSH.
"-vv" debug 2 lần.
"-vvv" debug 3 lần.

Kiến thức mình cũng còn hạn chế, có thể bài giảng thiếu sót. Nếu các bạn có gì thắc mắc hãy comment phía dưới cho mình biết nghen. Mình sẽ giải đáp tất cả dù là gạch đá của các bạn.

Part 2 - SSH tunnel

1. Học về cách start dịch vụ mặc định trên Linux mà cụ thể là Ubuntu.
2. Học về cách open một ssh tunnel trên local của mình. (Rất hay và ứng dụng rất nhiều).

Nói thêm linh tinh

Phật tổ có dạy nên chia sẽ phật pháp với người khác không nên giữ để sử dụng một mình. Kiến thức mình cũng vậy, mình thấy hay, hữu ích mình cũng phải đem chia sẽ với các bạn. Hi vọng các bạn cũng hãy chia sẽ tất cả những gì hay ho để CNTT VN tốt hơn, các bạn đi làm dễ giải quyết các vấn đề

Nếu bạn xài Linux thì chỉ cần gõ man ssh thì bạn sẽ thấy nội dung trên Option đầy đủ luôn nha.

No comments:

Post a Comment