gpt4 book ai didi

linux - 如何在远程服务器上以 root 身份执行本地脚本?

转载 作者:太空宇宙 更新时间:2023-11-04 11:20:31 25 4
gpt4 key购买 nike

我需要在远程服务器上以 root 权限执行 shell 脚本。 root 用户无法通过 SSH 直接连接这些服务器。因此,我必须首先以普通用户身份连接 ssh,然后在执行脚本之前将其更改为 root。用户和 root 密码是之前存储的参数,因此键盘交互不是一个选项。这样我就需要一个非(人类)交互式脚本,例如:

#!/bin/sh

username=admin
password=admin123
hosts={host1..host50}

for hostname in $hosts ;
do
ssh $username@$hostname sudo 'bash -s' < ./test.sh > results.txt
done

我该怎么做?在我当前的代码中,我需要输入管理员用户连接的密码,然后出现如下错误:sudo: no tty present and no askpass program specified。也许需要像 expect 这样的命令,但我在那里没有太多专业知识。

感谢您的帮助。

PS:我不能使用 SSH key ,并且不允许在这些服务器中进行管理更改。

最佳答案

据我所知,您可以 su - 进入 root,但您不想编辑 sudoers 和 ssh key 。
在这种情况下,expect 是你的 friend 。

Here你可以找到一个非常相似的例子,但我在这里复制了相关的代码部分。

#!/usr/bin/expect
set timeout 20

set host [lindex $argv 0]
set password [lindex $argv 1]

spawn ssh -tq $host su - root
expect "ssword" { send "pa55w0rd\r" } # only if you login with password auth
expect "ssword" { send "$password\r" }
expect "#" { send "id -a \r" } # run script as root
expect "#" { send \"exit\r" }

当然,您可以将其嵌入到 shell 脚本中,如下所示。

#!/bin/bash
expect -c "
...
expect eof"

希望能帮到你!

关于linux - 如何在远程服务器上以 root 身份执行本地脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18607939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com