在 bash 脚本中从远程主机访问和附加本地文件
Access and append local file from remote host in bash script
从我的 bash 脚本,执行 ssh 登录到远程主机。将我的配置文件连同脚本一起发送到远程主机以访问变量。代码如下:
#!/bin/bash
source ~/shell/config.sh
script=$(cat <<\____HERE
pubkeyarray=()
privkeyarray=()
for (( w=1; w<=3; w++))
do
cleos create key --file key[$w].txt
privatekey=$(sed -ne 's/^Private key: \([^ ]*\).*//p' ~/key[$w].txt)
pubkey=$(sed -ne 's/^Public key: \([^ ]*\).*//p' ~/key[$w].txt)
pubkeyarray+=("$pubkey")
privkeyarray+=("$privatekey")
done
echo "genesis_public_key=${pubkeyarray[0]}" >>config.sh
echo "genesis_private_key=${privkeyarray[0]}" >>config.sh
____HERE
)
SCRIPT="$(cat ~/shell/config.sh) ; $script;"
for i in ${!genesishost[*]} ; do
SCR=${SCRIPT/PASSWORD/${password}}
sshpass -p ${password} ssh -l ${username} ${genesishost[i]} "${SCR}"
done
genesishost
、password
和 username
在 config.sh
文件中。做一些 EOSIO 操作。
What I need:
从远程主机,我想在我正在执行 ssh
.[=20= 的本地计算机上附加带有 "genesis_public_key"
和 "genesis_private_key"
的配置文件]
此代码在远程生成一个新的配置文件并将这些行附加到那里。我需要 ssh 我的本地机器吗?如果是,则本地计算机不能始终相同以添加其 ssh 凭据。我怎样才能完成这个任务?请指导
该脚本显然只能访问远程服务器上的文件,而不是让它写入(不存在的)文件,只需让它写出您想要添加到本地文件的输出,然后让来电者做追加。
#!/bin/bash
source ~/shell/config.sh
script=$(cat <<\____HERE
pubkeyarray=()
privkeyarray=()
for (( w=1; w<=3; w++))
do
# ... whatever ...
done
echo "genesis_public_key=${pubkeyarray[0]}" # no redirect
echo "genesis_private_key=${privkeyarray[0]}" # no redirect
____HERE
)
SCRIPT="$(cat ~/shell/config.sh) ; $script;"
for i in ${!genesishost[*]} ; do
SCR=${SCRIPT/PASSWORD/${password}}
sshpass -p ${password} ssh -l ${username} ${genesishost[i]} "${SCR}"
done >>config.sh
显然,如果多个远程主机打印出同名变量的赋值,config.sh
中的最后一个赋值将替换所有较早的赋值。
从我的 bash 脚本,执行 ssh 登录到远程主机。将我的配置文件连同脚本一起发送到远程主机以访问变量。代码如下:
#!/bin/bash
source ~/shell/config.sh
script=$(cat <<\____HERE
pubkeyarray=()
privkeyarray=()
for (( w=1; w<=3; w++))
do
cleos create key --file key[$w].txt
privatekey=$(sed -ne 's/^Private key: \([^ ]*\).*//p' ~/key[$w].txt)
pubkey=$(sed -ne 's/^Public key: \([^ ]*\).*//p' ~/key[$w].txt)
pubkeyarray+=("$pubkey")
privkeyarray+=("$privatekey")
done
echo "genesis_public_key=${pubkeyarray[0]}" >>config.sh
echo "genesis_private_key=${privkeyarray[0]}" >>config.sh
____HERE
)
SCRIPT="$(cat ~/shell/config.sh) ; $script;"
for i in ${!genesishost[*]} ; do
SCR=${SCRIPT/PASSWORD/${password}}
sshpass -p ${password} ssh -l ${username} ${genesishost[i]} "${SCR}"
done
genesishost
、password
和 username
在 config.sh
文件中。做一些 EOSIO 操作。
What I need:
从远程主机,我想在我正在执行 ssh
.[=20= 的本地计算机上附加带有 "genesis_public_key"
和 "genesis_private_key"
的配置文件]
此代码在远程生成一个新的配置文件并将这些行附加到那里。我需要 ssh 我的本地机器吗?如果是,则本地计算机不能始终相同以添加其 ssh 凭据。我怎样才能完成这个任务?请指导
该脚本显然只能访问远程服务器上的文件,而不是让它写入(不存在的)文件,只需让它写出您想要添加到本地文件的输出,然后让来电者做追加。
#!/bin/bash
source ~/shell/config.sh
script=$(cat <<\____HERE
pubkeyarray=()
privkeyarray=()
for (( w=1; w<=3; w++))
do
# ... whatever ...
done
echo "genesis_public_key=${pubkeyarray[0]}" # no redirect
echo "genesis_private_key=${privkeyarray[0]}" # no redirect
____HERE
)
SCRIPT="$(cat ~/shell/config.sh) ; $script;"
for i in ${!genesishost[*]} ; do
SCR=${SCRIPT/PASSWORD/${password}}
sshpass -p ${password} ssh -l ${username} ${genesishost[i]} "${SCR}"
done >>config.sh
显然,如果多个远程主机打印出同名变量的赋值,config.sh
中的最后一个赋值将替换所有较早的赋值。