[英]Bash script doesn't exit SSH host after execution
我正在運行要為其設置靜態 IP 的 CentOS 7 VM。
運行SSHPASS=password sshpass -e ssh -tt -o "StrictHostKeyChecking no" host@192.168.122.229 'echo "password" | sudo -Sv && bash -s' < script.sh
SSHPASS=password sshpass -e ssh -tt -o "StrictHostKeyChecking no" host@192.168.122.229 'echo "password" | sudo -Sv && bash -s' < script.sh
執行中的所有命令script.sh
但,建成后,VM中的終端停留,我是否有irregardless exit
在我的bash腳本或者沒有結束命令。
管道我的密碼的原因是跳過在終端中輸入它。
這是我的 bash 腳本:
sudo cp /etc/sysconfig/network-scripts/ifcfg-ens3 /etc/sysconfig/network-scripts/ifcfg-ens3:0
sudo sed -i 's/BOOTPROTO="dhcp"/BOOTPROTO="static"/g' /etc/sysconfig/network-scripts/ifcfg-ens3:0
sudo sed -i 's/NAME="ens3"/NAME="ens3:0"/g' /etc/sysconfig/network-scripts/ifcfg-ens3:0
sudo sed -i 's/DEVICE="ens3"/DEVICE="ens3:0"/g' /etc/sysconfig/network-scripts/ifcfg-ens3:0
echo 'PEERDNS="yes"' | sudo tee -a /etc/sysconfig/network-scripts/ifcfg-ens3:0
echo 'IPADDR=192.168.122.201' | sudo tee -a /etc/sysconfig/network-scripts/ifcfg-ens3:0
echo 'NETMASK=255.255.255.0' | sudo tee -a /etc/sysconfig/network-scripts/ifcfg-ens3:0
echo 'GATEWAY=192.168.122.1' | sudo tee -a /etc/sysconfig/network-scripts/ifcfg-ens3:0
sudo systemctl restart network
exit
理想情況下,我想在同一個腳本中執行這些命令,但我似乎無法弄清楚問題是什么。
有趣的注意事項:如果我運行cat script.sh | SSHPASS=password sshpass -e ssh -tt host@192.168.122.229 'echo "password" | sudo -Sv && bash -s'
cat script.sh | SSHPASS=password sshpass -e ssh -tt host@192.168.122.229 'echo "password" | sudo -Sv && bash -s'
cat script.sh | SSHPASS=password sshpass -e ssh -tt host@192.168.122.229 'echo "password" | sudo -Sv && bash -s'
控制台在exit
命令(未輸入)上停止,如果我按 Enter 輸入它,VM 會停止,我只能用 CTRL+C 退出。
更新如果我運行具有以下內容的./script.sh
...
ssh -tt host@192.168.122.229 'echo "password" | sudo -Sv && bash -s' << EOF
echo
sudo cp /etc/sysconfig/network-scripts/ifcfg-ens3 /etc/sysconfig/network-scripts/ifcfg-ens3:0
sudo sed -i 's/BOOTPROTO="dhcp"/BOOTPROTO="static"/g' /etc/sysconfig/network-scripts/ifcfg-ens3:0
sudo sed -i 's/NAME="ens3"/NAME="ens3:0"/g' /etc/sysconfig/network-scripts/ifcfg-ens3:0
sudo sed -i 's/DEVICE="ens3"/DEVICE="ens3:0"/g' /etc/sysconfig/network-scripts/ifcfg-ens3:0
echo 'PEERDNS="yes"' | sudo tee -a /etc/sysconfig/network-scripts/ifcfg-ens3:0
echo 'IPADDR=192.168.122.201' | sudo tee -a /etc/sysconfig/network-scripts/ifcfg-ens3:0
echo 'NETMASK=255.255.255.0' | sudo tee -a /etc/sysconfig/network-scripts/ifcfg-ens3:0
echo 'GATEWAY=192.168.122.1' | sudo tee -a /etc/sysconfig/network-scripts/ifcfg-ens3:0
exit
EOF
一切正常。 這讓我相信問題與sudo systemctl restart network
。 通過添加sudo systemctl restart network; exit
確認sudo systemctl restart network; exit
在腳本結束時sudo systemctl restart network; exit
。 可能跟這個命令的性質有關。
您的目標是在 VM 中編輯文件。 除了在 VM 上echo "password"
之外,您的任何命令都沒有運行任何命令。
以下未測試。 您想要的是讓sudo
遠程運行,從ssh
通過標准輸入通過連接的腳本中讀取。 就像是
SSHPASS=password sshpass -e ssh host@192.168.122.229 \
'{ echo "password"; cat; }| sudo -Sv bash' < script.sh
cat
確保sudo
從標准輸入讀取密碼后,通過連接發送ssh
發送的所有內容。
你的第一個命令
SSHPASS=password sshpass -e ssh \
-tt \
-o "StrictHostKeyChecking no" \
host@192.168.122.229 'echo "password" |
sudo -Sv &&
bash -s' < script.sh
首先運行sshpass
。 它登錄到遠程主機,運行echo "password"
,然后注銷。 該輸出通過管道傳送到sudo -Sv
,它沒有要運行的命令,只是忽略其輸入並成功退出。 然后bash
在本地運行從腳本中讀取的代碼。
你的第二個命令,
cat script.sh |
SSHPASS=password sshpass -e ssh -tt host@192.168.122.229 'echo "password" |
sudo -Sv &&
bash -s'
將您的腳本內容通過管道傳送到sshpass
,它再次登錄到遠程主機並執行命令,忽略您的腳本並退出。 sudo
然后忽略它的輸入並成功退出,啟動bash -s
阻塞,等待輸入。
順便說一下,您的腳本可以簡化為
cd /etc/sysconfig/network-scripts
{
sed -e 's/BOOTPROTO="dhcp"/BOOTPROTO="static"/g' \
-e 's/NAME="ens3"/NAME="ens3:0"/g' \
-e 's/DEVICE="ens3"/DEVICE="ens3:0"/g' ifcfg-ens3
echo 'PEERDNS="yes"'
echo 'IPADDR=192.168.122.201'
echo 'NETMASK=255.255.255.0'
echo 'GATEWAY=192.168.122.1'
} > ifcfg-ens3:0
systemctl restart network
沒有sudo
(因為腳本是用sudo
執行的),一個sed
命令(從原始文件中讀取)和多個echo
都寫入同一個輸出文件。
請嘗試這樣的事情
ssh -t ubuntu@xyz.com << EOF
command1
command2
exit
EOF
或者
SSHPASS=password sshpass -e ssh -tt -o "StrictHostKeyChecking no" host@192.168.122.229 'echo "password" | sudo -Sv && bash -s' < script.sh && exit
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.