Blog Chia SẻBlog Chia Sẻ

Cấu hình shortcut ssh config “bastion host” va dung “Deployer”

0

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

ssh-keygen

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. 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

======================================================================================================

##### add deployer cho project dung composer

"require-dev": {
"deployer/deployer": "^6.8",
}

composer install

// khoi tao deployer
dep init

##### Deployer

#####File deploy.php

namespace Deployer;

require 'recipe/laravel.php';

// Project name
set('application', 'Visionet');
// Config

set('repository', 'link_git');

// [Optional] Allocate tty for git clone. Default value is false.
set('git_tty', false);

if (get('stage') === 'production')
{
set('keep_releases', 2);
}else{
set('keep_releases', 1);
}

// Shared files/dirs between deploys
add('shared_files', []);
add('shared_dirs', []);

// Writable dirs by web server
set('writable_dirs', [
'bootstrap/cache',
'storage',
'storage/app',
'storage/framework',
'storage/framework/cache',
'storage/framework/sessions',
'storage/framework/views',
'storage/logs',
]);

// Hosts
inventory('hosts.yml');

// Tasks

task('build', function () {
run('cd {{release_path}} && build');
});

task('artisan:optimize', function () {});

desc('shared/.envを{stage}.envで上書き');
task('overwrite-env', function(){
$stage = get('stage');
$targetEnv = "env/${stage}.env";
$deployPath = get('deploy_path');
$sharedPath = "${deployPath}/shared";
run("cp -f {{release_path}}/${targetEnv} ${sharedPath}/.env");
});

desc('.htaccessを生成');
task('overwrite-htaccess', function(){
$stage = get('stage');
$targetFile = "env/${stage}.htaccess";
$deployPath = get('deploy_path');
$sharedPath = "${deployPath}";
run("cp -f {{release_path}}/${targetFile} {{release_path}}/public/.htaccess");
});

// [Optional] if deploy fails automatically unlock.
after('deploy:failed', 'deploy:unlock');

before('deploy:shared', 'overwrite-env');
after('deploy:shared', 'overwrite-htaccess');

// Migrate database before symlink new release.
// before('deploy:symlink', 'artisan:migrate');

 

##### File hosts.yml

develop:
  hostname: 10.10.0.10
  stage: develop
  roles:
    - app
  deploy_path: /var/www/visionet.dev.com
  branch: develop
  user: visionet.dev.com
  identityFile: ~/.ssh/id_rsa
  forwardAgent: true
  multiplexing: false
staging:
  hostname: 10.10.0.10
  stage: staging
  roles:
    - app
  deploy_path: /var/www/visionet.stg.com
  branch: staging
  user: visionet.stg.com
  identityFile: ~/.ssh/id_rsa
  forwardAgent: true
  multiplexing: false
production:
  hostname: 10.0.0.10
  stage: production
  roles:
    - app
  deploy_path: /var/www/visionet.com
  branch: main
  user: visionet.com
  identityFile: ~/.ssh/id_rsa
  forwardAgent: true
  multiplexing: false

 

 

Câu hỏi/câu trả lời này có giải quyết được sự cố của bạn không?

Đánh giá

Ý kiến ​​(không bắt buộc)

0Nó rất hữu ích cho mọi người.

Tìm kiếm

Xem các câu hỏi liên quan