如何解决通过 ssh 执行包含“sudo su”的远程脚本
我需要运行一个需要以 root 权限远程运行的脚本。因此我在脚本的开头添加了“sudo su”命令。然而 ssh 只是登录远程服务器并停留在 sudo su 命令,并且它不会从脚本的下一行继续。
server.sh
sudo -s
sudo apt-get update
sudo apt-get upgrade
client.sh
scp -i "$key.pem" server.sh "$dns:/tmp"
ssh -tt -i "$key.pem" $dns "bash /tmp/server.sh"
server.sh 和 client.sh 位于同一个本地目录。当我运行 ./client.sh 时,远程运行的 server.sh 卡在第一行并且不继续执行“sudo apt-get update”命令。出现这种行为的原因是什么,有解决办法吗?
解决方法
sudo -s
没有命令会启动一个新的交互式 shell。以下命令在退出之前不会执行。请参阅man sudo
。
如果您已经通过 apt-get
运行 sudo
,并且 sudo
不需要密码,为什么还需要 sudo -s
?
你可以使用
ssh user@ip '[command]'
在远程主机上运行 [command]。如果您有一个具有 root 权限的用户(又名 sudo)并且您可以使用没有密码的命令(NOPASSWD:[command,list or ALL]),这是我可以建议的最安全的方法,但是如果您希望脚本在远程服务器并由本地计算机触发,您可以随时
ssh user@ip 'sudo /bin/bash /home/[user]/server.sh'
这也可以。您也可以使用“scp”命令复制脚本,然后再次使用 ssh 将其删除,以实现自动化的单脚本方法。
,当您运行命令 sudo -s
时,您更改了用户,脚本的其余部分将丢失,因为它在一个新的 shell 中。
删除行 sudo -s
并再次尝试运行脚本。
注意:请务必记住,运行 sudo
的用户必须位于具有 /etc/sudoers
权限的 username ALL=(ALL) NOPASSWD:ALL
文件中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。