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
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
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ự ánHostName
: Địa chỉ ip của máy chủUser
: User để truy cập ssh vào serverIdentityFile
: 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 serverPort
: Port khi connect vào server, mặc định sẽ là 22ServerAliveInterval
: Time out khi connect vào serverBạ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
# 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
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
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
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
)
ssh-keygen
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.
/etc/ssh/sshd_config
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
- Sau đó, khởi động lại SSH Service
service sshd restart
/etc/ssh/sshd_config
:
PasswordAuthentication no
service sshd restart