linux - Bash 脚本中的多个 SSH 命令

标签 linux bash shell ssh

<分区>

在 bash 脚本的一部分中,我需要通过 ssh 进入一个远程框,更改为 root,然后部署一个 rpm。我的代码在更改为 root 后卡住了,我不确定为什么。任何帮助将不胜感激。理想情况下,我希望它通过 ssh 登录,切换到 root,部署 rpm,然后退出 ssh session 。

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

Enter password:

[root@hostname /home/user]#

最佳答案

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

sudo rpm -Uvh rpmtodeploy.rpm

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

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

关于linux - Bash 脚本中的多个 SSH 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20134122/

相关文章:

regex - ls 和 find 之间的正则表达式差异以搜索 1 个字符串或另一个字符串

python - UNIX 上的 CPU 利用率

java - 如何从 Java 程序中调用 shell 脚本?

shell - 将 ctrl-c 发送到特定 screen session

ruby - 通过 Ruby 更改目录

linux - Docker-Machine 命令超时 TLS 握手,但 Dock Swarmer 工作正常

linux - 我如何知道进程的最后安排时间

bash - bash脚本中点的用法

c - 线程 : How exactly work rwlockattr

linux - 文本匹配后将管道进程推迟到后台