0

我需要在远程服务器中执行具有 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 密钥,并且这些服务器中不允许进行管理更改。

4

3 回答 3

1

因此,据我了解,您可以su -进入 root,但您既不想编辑 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"

我希望我能帮上忙!

于 2013-09-04T08:43:29.840 回答
0

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

sudo visudo

将指令添加NOPASSWD到用户

Ubuntu 站点参考

于 2013-09-04T08:09:34.447 回答
0

使用 SSH 密钥避免输入密码

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

于 2013-09-04T07:36:32.430 回答