###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ảm ơn bạn đã trả lời.