Shell Script Execute on Remote Machine

本文介绍了一个用于远程执行的Shell脚本示例,该脚本能够连接到远程数据库服务器,并导出设备数据为CSV文件。具体步骤包括准备远程环境、导出数据并下载到本地。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Shell Script Execute on Remote Machine

I remember my previous company had this similar script.

#!/bin/bash

#####################################
# how to run
# ./dump-css-devices-to-csv.sh HOST PORT SYS_USER DB_NAME USER PASSWORD
#####################################

start=$SECONDS

DEFAULT_DB_HOST="localhost"
DEFAULT_PORT=22
DEFAULT_SYSTEM_USER="root"
DEFAULT_DB_USER=“admin"
DEFAULT_DB_TABLE=“test"

DB_HOST=${1:-$DEFAULT_DB_HOST}
PORT=${2:-$DEFAULT_PORT}
SYSTEM_USER=${3:-$DEFAULT_SYSTEM_USER}
DB_TABLE=${4:-$DEFAULT_DB_TABLE}
DB_USER=${5:-$DEFAULT_DB_USER}

echo "Prepare the Remote DB Server ENV for DUMP"
ssh -i ~/.ssh/sky -p $PORT $SYSTEM_USER@$DB_HOST "rm -fr /home/sillycat/css_device_dumps"
ssh -i ~/.ssh/sky -p $PORT $SYSTEM_USER@$DB_HOST "mkdir /home/sillycat/css_device_dumps"
ssh -i ~/.ssh/sky -p $PORT $SYSTEM_USER@$DB_HOST "touch /home/sillycat/css_device_dumps/css_devices_only_csv.txt"
ssh -i ~/.ssh/sky -p $PORT $SYSTEM_USER@$DB_HOST "chmod 666 /home/sillycat/css_device_dumps/css_devices_only_csv.txt"

echo "Start to dump devices to CSV"

ssh -i ~/.ssh/sky -p $PORT $SYSTEM_USER@$DB_HOST "export PGPASSWORD=$6;psql -U $DB_USER -w -d $DB_TABLE -h localhost -c \"COPY (
SELECT
DISTINCT ON (dap.serialnumber, dap.platform) dap.serialnumber as \"serialNumber\",
dap.platform,
dap.uuid as deviceUUID,
dap.enabled,
dap.pairingtoken as \"pairingToken\",
dap.currentfirmwareversion as \"firmware\",
dap.timezoneoffsetinminutes as \"timezoneOffsetinMinutes\",
dap.pairingstatus as \"pairingStatus\",
dap.lastlogindate as \"lastLoginDate\",
ua.usagetype as \"usageType\",
ua.uuid as \"userUUID\",
ua.displayName AS \"systemName\",
ua.extension AS \"extension\",
re.remoteIP as \"remoteIP\",
ug.uuid AS \"groupUUID\"
FROM
sillycat_4_1.deviceaccountpairing dap JOIN
sillycat_4_1.useraccount AS ua ON ua.id = dap.useraccountid JOIN
sillycat_4_1.usergroup AS ug ON (ua.groupid = ug.id) LEFT JOIN
sillycat_4_1.remoteendpoint AS re on (dap.serialNumber = re.serialNumber)
ORDER BY
dap.serialnumber, dap.platform, dap.lastlogindate DESC )
TO '/home/sillycat/css_device_dumps/css_devices_only_csv.txt' WITH (FORMAT CSV, HEADER, DELIMITER ',', ENCODING 'UTF8', FORCE_QUOTE *)\";"

echo "Download the CSV to Local"
# remove any old csv files already on disk
rm -f css_devices_only_csv.txt
# get users file from css database
sudo scp -i ~/.ssh/sky -P $PORT $SYSTEM_USER@$DB_HOST:/home/sillycat/css_device_dumps/css_devices_only_csv.txt ./css_devices_only_csv.txt

end=$SECONDS
duration=$(( end - start ))
echo "Script completed in $duration seconds."


Reference:
https://zaiste.net/a_few_ways_to_execute_commands_remotely_using_ssh/
可以编写如下的Shell脚本来完成您的需求: ```bash #!/bin/bash # 定义包含服务器IP地址的数组 vmip vmip=("192.168.0.1" "192.168.0.2" "192.168.0.3") # 示例 IP 地址,请替换为您实际使用的 IP 地址 # 遍历 vmip 数组中的每个元素 (即每个服务器的 IP) for ip in "${vmip[@]}" do echo "Processing server: $ip" # 使用 scp 命令将本地的 abc 目录上传到远程服务器 scp -r ./abc user@$ip:/destination/path/ if [ $? -eq 0 ]; then echo "Directory copied to $ip" # 在目标服务器上通过 SSH 执行 ls 查看文件是否成功传输并列出内容 ssh user@$ip 'ls /destination/path/abc' if [ $? -ne 0 ]; then echo "Failed to execute ls on remote machine $ip" fi else echo "Error while copying directory to $ip" fi done ``` 此脚本的工作流程如下: 1. 创建了一个名为 `vmip` 的字符串数组,其中存放了多个虚拟机或服务器的 IP 地址; 2. 利用了 for 循环逐一处理每一个 IP 地址所代表的目标主机; 3. 对于每个目标主机,在循环内部首先利用 SCP 协议递归地复制本地路径为 `./abc` 下的所有文件至指定远端位置 `/destination/path/`; 4. 接着检查上次命令执行状态 `$?`, 如果无误,则尝试使用 SSH 连接到对应服务器去运行 `ls` 指令查看结果;如果出现错误则输出相应提示信息。 请注意修改示例中的用户名称 (`user`) 和目的地路径等以适应实际情况。此外还需保证当前系统已经配置好针对所有涉及节点无需密码验证即可直接SSH访问的前提条件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值