Bash: 运行 远程主机上的 sudo 功能?
Bash: Running a function as sudo on remote host?
我有以下示例脚本,用于在远程主机上执行 运行 命令。
该脚本从用户输入中接受远程主机的密码,我们可以使用该密码作为该用户登录,我希望也传递给 sudo
。
问题是,我似乎无法使用 sudo
将第二个函数中的 运行OnRemoteHostAsRoot 函数获取到 运行 ,我需要。
如何让它工作?
两端站台为Ubuntu18或20
#!/bin/bash
read SSHPASS
export SSHPASS
runOnRemoteHost() {
# ...
whoami
# ...
}
# ...
sshpass -e ssh -o PasswordAuthentication=yes "user@remotehost" "$(declare -f runOnRemoteHost); runOnRemoteHost" 2>&1
# ...
runOnRemoteHostAsRoot() {
# ...
whoami
# ...
}
# ...
echo "${SSHPASS}" | sshpass -e ssh -o PasswordAuthentication=yes "user@remotehost" "$(declare -f runOnRemoteHostAsRoot); sudo --stdin runOnRemoteHostAsRoot" 2>&1
# ...
预期输出:
user
root
实际输出:
user
[sudo] password for user: sudo: runOnRemoteHostAsRoot: command not found
@Will 的建议在这种情况下很有用,使用 sudo bash -c
,然后声明和 运行 函数:
sudo bash -c "$(declare -f runOnRemoteHostAsRoot); runOnRemoteHostAsRoot"
我们将在通过 sshpass
传递密码后使用该行进行无密码登录,如下所示:
echo '${SSHPASS}' | sudo --stdin bash -c '$(declare -f runOnRemoteHostAsRoot); runOnRemoteHostAsRoot'`
所以在上面的例子中使用这个:
#!/bin/bash
read SSHPASS
export SSHPASS
runOnRemoteHost() {
# ...
whoami
# ...
}
# ...
sshpass -e ssh -o PasswordAuthentication=yes "user@remotehost" "$(declare -f runOnRemoteHost); runOnRemoteHost" 2>&1
# ...
runOnRemoteHostAsRoot() {
# ...
whoami
# ...
}
# ...
sshpass -e ssh -o PasswordAuthentication=yes "user@remotehost" "echo '${SSHPASS}' | sudo --stdin bash -c '$(declare -f runOnRemoteHostAsRoot); runOnRemoteHostAsRoot'" 2>&1
输出:
user
root
我有以下示例脚本,用于在远程主机上执行 运行 命令。
该脚本从用户输入中接受远程主机的密码,我们可以使用该密码作为该用户登录,我希望也传递给 sudo
。
问题是,我似乎无法使用 sudo
将第二个函数中的 运行OnRemoteHostAsRoot 函数获取到 运行 ,我需要。
如何让它工作?
两端站台为Ubuntu18或20
#!/bin/bash
read SSHPASS
export SSHPASS
runOnRemoteHost() {
# ...
whoami
# ...
}
# ...
sshpass -e ssh -o PasswordAuthentication=yes "user@remotehost" "$(declare -f runOnRemoteHost); runOnRemoteHost" 2>&1
# ...
runOnRemoteHostAsRoot() {
# ...
whoami
# ...
}
# ...
echo "${SSHPASS}" | sshpass -e ssh -o PasswordAuthentication=yes "user@remotehost" "$(declare -f runOnRemoteHostAsRoot); sudo --stdin runOnRemoteHostAsRoot" 2>&1
# ...
预期输出:
user
root
实际输出:
user
[sudo] password for user: sudo: runOnRemoteHostAsRoot: command not found
@Will 的建议在这种情况下很有用,使用 sudo bash -c
,然后声明和 运行 函数:
sudo bash -c "$(declare -f runOnRemoteHostAsRoot); runOnRemoteHostAsRoot"
我们将在通过 sshpass
传递密码后使用该行进行无密码登录,如下所示:
echo '${SSHPASS}' | sudo --stdin bash -c '$(declare -f runOnRemoteHostAsRoot); runOnRemoteHostAsRoot'`
所以在上面的例子中使用这个:
#!/bin/bash
read SSHPASS
export SSHPASS
runOnRemoteHost() {
# ...
whoami
# ...
}
# ...
sshpass -e ssh -o PasswordAuthentication=yes "user@remotehost" "$(declare -f runOnRemoteHost); runOnRemoteHost" 2>&1
# ...
runOnRemoteHostAsRoot() {
# ...
whoami
# ...
}
# ...
sshpass -e ssh -o PasswordAuthentication=yes "user@remotehost" "echo '${SSHPASS}' | sudo --stdin bash -c '$(declare -f runOnRemoteHostAsRoot); runOnRemoteHostAsRoot'" 2>&1
输出:
user
root