Linux 在Bash脚本中执行多个SSH命令

Linux 在Bash脚本中执行多个SSH命令,linux,bash,shell,ssh,Linux,Bash,Shell,Ssh,在bash脚本的一个部分中,我需要ssh到一个远程框中,更改为root,然后部署一个rpm。我的代码在更改为root之后被卡住了,我不知道为什么。任何帮助都将不胜感激。理想情况下,我希望它使用ssh连接,切换到root,部署rpm,然后退出ssh会话 user="user" host="hostname" echo "Enter password: " read -s pw ssh -t "$user"@"$host" "sudo su; $pw; rpm -Uvh rpmtodeploy.rp

在bash脚本的一个部分中,我需要ssh到一个远程框中,更改为root,然后部署一个rpm。我的代码在更改为root之后被卡住了,我不知道为什么。任何帮助都将不胜感激。理想情况下,我希望它使用ssh连接,切换到root,部署rpm,然后退出ssh会话

user="user"
host="hostname"
echo "Enter password: "
read -s pw
ssh -t "$user"@"$host" "sudo su; $pw; rpm -Uvh rpmtodeploy.rpm;"
这是我目前得到的:

user@localhost:~$bash rpm.sh

输入密码:

[root@hostname/home/user]#


除非您对命令进行后台处理,否则bash将在执行下一个命令之前等待它退出。由于
su
正在生成一个交互式shell,它将继续运行,直到您关闭它。您应该直接使用sudo:

sudo rpm -Uvh rpmtodeploy.rpm
如果您有
sudo
权限访问
su
,但没有
rpm
,请使用
-c
选项:

sudo su -c 'rpm -Uvh rpmtodeploy.rpm'

如何通过第一个命令传递密码?sudo rpm-Uvh rpmtodeploy。rpm@Konnor你没有。配置
sudo
以允许
NOPASSWD
执行
rpm
命令。如果你不能做到这一点,你将不得不使用
expect
脚本。啊,好的,我之前已经研究过了。谢谢@jordanm