Cấu hình shortcut ssh config

  • April 16, 2020
  • 1601

Giới thiệu

Hiện nay các lập trình viên thường xuyên phải truy cập vào server để cấu hình, check code, check log. Vì vậy chúng ta rất hay ssh vào server. Hôm nay mình giới thiệu cho các bạn một cách ssh vào server cực kì dễ dàng nhé. Cách ssh thông thường với file ec2.pem


// Set quyền chỉ đọc cho file .pem
chmod -R 400 ec2.pem

// Ssh to sever
ssh -i [path_file.pem] [user]@[ip]

// Ví dụ
ssh -i ec2.pem ec2-user@172.17.1.15

1. Cấu hình ssh config

Thêm cấu hình vào file config, sử dụng một text editor như vim hoặc nano.

vi ~/.ssh/config
nano ~/.ssh/config

Nếu trên máy tính của bạn chưa có thư mục .ssh thì chạy lệnh sau:

mkdir -p $HOME/.ssh
chmod 0700 $HOME/.ssh

Một số chỉ thị hay dùng để cấu hình ssh config

  • Host: Tên viết tắt của máy chủ, bạn có thể đặt bất kì cái nào dễ nhớ nhất, giả sử tên dự án
  • HostName: Địa chỉ ip của máy chủ
  • User: User để truy cập ssh vào server
  • IdentityFile: Chính là public key của ssh, mặc định nó sẽ tìm trong ~/.ssh/id_rsa nếu bạn không config.
  • ProxyCommand: Command đặc biệt khi connect vào server
  • Port: Port khi connect vào server, mặc định sẽ là 22
  • ServerAliveInterval: Time out khi connect vào server
Ví dụ

Bạn muốn connect vào server 192.168.1.100 với port là 2222 ta cấu hình như sau:
- Mở file config

vi ~/.ssh/config

- Thêm config


        Host demo-server-1
        Hostname 192.168.1.100
        User root
        Port 2222

- Ấn Esc -> :wp để lưu lại config
- Bây giờ để ssh vào server 192.168.1.100 thay vì dùng lệnh ssh root@192.168.1.100 -p 2222, chỉ cần gõ ssh demo-server-1 vậy là xong.
- Nếu bạn có nhiều server chỉ cần thêm các server tiếp theo vào bên dưới:


### default for all ##
Host *
     ForwardAgent no
     ForwardX11 no
     ForwardX11Trusted yes
     User nixcraft
     Port 22
     Protocol 2
     ServerAliveInterval 60
     ServerAliveCountMax 30
 
## override as per host ##
Host server1
     HostName server1.cyberciti.biz
     User nixcraft
     Port 4242
     IdentityFile /nfs/shared/users/nixcraft/keys/server1/id_rsa
 
## Home nas server ##
Host nas01
     HostName 192.168.1.100
     User root
     IdentityFile ~/.ssh/nas01.key
 
## Login AWS Cloud ##
Host aws.apache
     HostName 1.2.3.4
     User wwwdata
     IdentityFile ~/.ssh/aws.apache.key
 
## Login to internal lan server at 192.168.0.251 via our public uk office ssh based gateway using ##
## $ ssh uk.gw.lan ##
Host uk.gw.lan uk.lan
     HostName 192.168.0.251
     User nixcraft
     ProxyCommand  ssh nixcraft@gateway.uk.cyberciti.biz nc %h %p 2> /dev/null
 
## Our Us Proxy Server ##
## Forward all local port 3128 traffic to port 3128 on the remote vps1.cyberciti.biz server ## 
## $ ssh -f -N  proxyus ##
Host proxyus
    HostName vps1.cyberciti.biz
    User breakfree
    IdentityFile ~/.ssh/vps1.cyberciti.biz.key
    LocalForward 3128 127.0.0.1:3128

Config access server via baston


# Truy cập thông qua baston aws linux 2
Host demo-vpc-public HostName 54.147.59.244 User ec2-user Port 22 IdentityFile ~/.ssh/learn-ec2.pem Host demo-vpc-protected HostName 172.30.41.181 User ec2-user IdentityFile ~/.ssh/learn-ec2.pem ProxyCommand ssh -W %h:%p demo-vpc-public

# Truy cập server test-web-api-1 qua bastion test-bastion-1 Host test-bastion-1 HostName 18.182.111.111 User centos Port 52396 IdentityFile ~/.ssh/id_rsa.pem Host test-web-api-1 HostName 170.23.90.11 User centos IdentityFile ~/.ssh/id_rsa.pem ProxyCommand ssh -W %h:%p test-bastion-1

Giải thích config


// Comand thực tế
// Config 1
ssh -i ~/.ssh/id_rsa.pem centos@18.182.111.111 -p 52396 -A

// Config 2
// Access to bastion
ssh -i ~/.ssh/id_rsa.pem centos@18.182.111.111 -p 52396 -A
// Access to server from bastion
ssh -i ~/.ssh/id_rsa.pem centos@170.23.90.11 -A

Config ssh multi server


  Host demo*
  User ec2-user
  Port 22
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile ~/.ssh/demo-ec2.pem
  IdentitiesOnly yes
  LogLevel FATAL

  Host demo-api-stg
  HostName 54.250.14.17

  Host demo-api-dev
  HostName 54.250.14.28
Tăng Tốc độ ssh session

Thêm đoạn sau vào config:


ControlPath ~/.ssh/controlmasters/%r@%h:%p
ControlMaster auto

Sau khi thêm config sẽ như sau:


Host demo-server-1
       Hostname 192.168.1.100
       User root
       Port 2222
       ControlPath ~/.ssh/controlmasters/%r@%h:%p
      ControlMaster auto

2. CONFIG SSH KEY

Cách làm: Tạo ssh key tại máy cá nhân rồi -> public key lên server -> config `IdentityFile` vào file private key của máy cá nhân (mặc định là ~/.ssh/id_rsa )

Tạo ssh key tại máy cá nhân

ssh-keygen
Lưu ý: khi được hỏi passphrase, nên nhấn phím Enter để trống, tránh phải nhập thêm mật khẩu một lần nữa khi sử dụng key. Và bạn nên sử dụng SSH Keys tạo bởi phương pháp này.

Thêm public key vào vps


mkdir ~/.ssh/
vi ~/.ssh/authorized_keys

Copy toàn bộ nội dung Public key (dạng ssh-rsa AAAA...) chèn thêm phía cuối file. Nhấn ESC -> :wq để lưu lại và thoát ra khỏi editor.

- Bật chế độ đăng nhập bằng SSH Keys: kích hoạt (uncomment) các tham số sau trong SSH Config tại /etc/ssh/sshd_config

PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
- Sau đó, khởi động lại SSH Service

service sshd restart

Vô hiệu quá chứng năng đăng nhập sử dụng mật khẩu

Để vô hiệu hóa đăng nhập sử dụng mật khẩu bằng cách chỉnh sửa tham số sau trong /etc/ssh/sshd_config:

PasswordAuthentication no
- Sau đó, khởi động lại SSH Service

service sshd restart