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