Kết nối SSH và chạy command trên Remote Linux Server sử dụng Shell Script


Tiếp tục series về lập trình Shell Script, vinasupport sẽ hướng dẫn các bạn sử dụng viết 1 script đơn giản để kết nối ssh tới 1 máy chủ Linux từ xa và chạy các command trên đó. Để thực hiện kết nối tới 1 server, việc đầu tiên chúng ta cần là setup 1 SSH Key để không phải nhập password chạy lệnh ssh. Vui lòng tham khảo bài viết sau: 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

2 ví dụ ở trên là chúng ta thực hiện tạo SSH Keys để kết nối nên không cần nhập password, nhưng trường hợp các bạn muốn sử dụng password để xác thực ssh thì hãy cài 1 package có tên 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é!

Nguồn: vinasupport.com

             
SHARE

Bài viết liên quan

mode_edit Bình luận của bạ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 *

account_circle
web