繁体   English   中英

如何以根用户身份在远程服务器中执行本地脚本?

[英]How to execute local script as root in remote servers?

我需要在远程服务器中以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

我怎样才能做到这一点? 在当前代码中,我需要输入admin用户连接的密码,然后出现类似sudo: no tty present and no askpass program specified的错误: sudo: no tty present and no askpass program specified 也许这样的命令expect是必要的,但我没有太多的专业知识在那里。

谢谢你的帮助。

PS:我无法使用SSH密钥,并且这些服务器中不允许进行管理更改。

因此,据我了解,您可以su -进入根目录,但您既不想编辑sudoers也不愿编辑ssh密钥。
在这种情况下, expect是您的朋友。

在这里您可以找到一个非常相似的示例,但是我在此处复制了相关代码部分。

#!/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"

希望我能帮上忙!

使用SSH密钥避免输入密码

查看此链接: https : //wiki.archlinux.org/index.php/SSH_Keys

如果您可以修改远程主机上的sudoers文件,则可以告诉sudoer服务不要要求特定用户执行sudo命令的密码。

sudo visudo

向用户添加指令NOPASSWD

Ubuntu网站参考

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM