Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the wordpress-seo domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /var/www/vinascript/html/wp-includes/functions.php on line 6114
Kết nối SSH và chạy command trên Remote Linux Server sử dụng Shell Script - VinaScript

Latest Post

Triển khai dự án PHP, Mysql với Nginx trên Docker Tìm hiểu về HTML – Ưu điểm, nhược điểm và cách hoạt động của HTML

Trong chuỗi bài viết liên quan đến lập trình Shell Script, chúng ta sẽ tiếp tục học cách viết một script đơn giản để thực hiện kết nối đến một máy chủ Linux từ xa và thực hiện các lệnh trên đó. Để bắt đầu quá trình kết nối đến máy chủ, bước đầu tiên là thiết lập một SSH Key để không cần phải nhập mật khẩu khi sử dụng lệnh SSH. Bạn có thể tham khảo bài viết sau để biết cách thực hiện: “Tạo và Kết nối đến Máy Chủ bằng SSH Keys”. Tạo và kết nối tới Server sử dụng SSH Keys.

Kết nối SSH và chạy command

Đoạn script bên dưới, thực hiện kết nối ssh tới remote server chạy lệnh “uptime“.

#!/usr/bin/env bash

# Define variables
HOST=vinasupport.com
USER=root
PORT=22
COMMAND="uptime"

# SSH connect
output=$(ssh -o StrictHostKeyChecking=no ${USER}@${HOST} -p ${PORT} ${COMMAND})
echo $output

Tham số -o để tự động thêm host vào file known_hosts trong trường hợp kết nối đầu tiên các bạn sẽ gặp phải message như sau:

The authenticity of host ‘[vinasupport.com]’ can’t be established.
ECDSA key fingerprint is SHA256:Ge8ttoZq6AjZqQ4vWAk2gGOz9U1Vxx1123456677
Are you sure you want to continue connecting (yes/no)?

Kết nối SSH và chạy nhiều command

Giờ chúng ta update lại code để có thể chạy 1 danh sách các command trên remote server

#!/usr/bin/env bash

# Define variables
HOST=vinasupport.com
USER=root
PORT=22
IFS='' read -r -d '' COMMAND <<'EOF'
cd /tmp
echo 'We are vinasupport team' > test.txt
cat test.txt
EOF
echo "$COMMAND"

# SSH connect
output=$(ssh -o StrictHostKeyChecking=no ${USER}@${HOST} -p ${PORT} "$COMMAND")
echo $output

Kết quả: 

Kết nối SSH với password

Hai ví dụ ở trên cho thấy chúng ta đã tạo SSH Keys để thiết lập kết nối mà không cần phải nhập mật khẩu. Tuy nhiên, nếu bạn muốn sử dụng mật khẩu để xác thực SSH, bạn có thể cài đặt một package có tên gọi là “sshpass”.

Cài đặt sshpass

# On Ubuntu/Debian
sudo apt-get install sshpass

# On Redhat/CentOS
sudo yum install sshpass

Sau đó update lại script như sau:

#!/usr/bin/env bash

# Define variables
HOST=vinasupport.com
USER=root
PASSWORD=123456
PORT=22
IFS='' read -r -d '' COMMAND <<'EOF'
cd /tmp
echo 'We are vinasupport team' > test.txt
cat test.txt
EOF
echo "$COMMAND"

# SSH connect
output=$( sshpass -p '${PASSWORD}' ssh -o StrictHostKeyChecking=no ${USER}@${HOST} -p ${PORT} "$COMMAND")
echo $output

Trong đó: 

  • sshpass với tham số -p: Sử dụng password ở dạng plan text
  • sshpass với tham số -f: Sử dụng password trong 1 file, chúng ta cần tạo 1 file lưu password
  • sshpass với tham số -3: Sử dụng password của 1 biến môi trường

Nếu có khó khăn gì thì các bạn vui lòng để lại comment bên dưới nhé!

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *