gpt4 book ai didi

linux - 期望脚本 su 到 root 并执行 sed

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

我以前从未使用过 expect 但需要一个脚本来为大量主机执行以下操作

  • ssh 进入一台机器
  • su到root并输入root密码
  • 在/etc/passwd 中创建一个文件,用其他文本替换一些文本,对于这个例子,假设原始文本是 TEXT,要替换的文本是 NEWTEXT

有人能帮忙吗?

最佳答案

可以理解的是,以 root 身份执行脚本来处理命令是一个巨大的安全问题,通常是不允许的。

然而,Expect具有运行伪终端的能力,因此它可以像人类在键盘上打字一样工作。

这或多或少是你问的,但未经测试。

#!/bin/sh
# if run from shell, restart with wish \
exec wish "$0" "$@"

package require Expect

proc fix_a_host {host usrname password root_password} {
# open session to host, wait for a username prompt
spawn ssh $host
expect "username:"

# send username, wait for a password prompt
send "$usrname\r"
expect "password:"

# send password, wait for shell prompt
send "$password\r"
expect "%"

# become root, wait for prompt
send "su\r"
expect "#"

# change TEXT to NEWTEXT in password file
send "sed 's/TEXT/NEWTEXT'" /etc/passwd
expect "#"

# exit root, exit host connection
send "exit\r"
expect "%"

send "exit\r"
expect eof
}

fix_a_host {"host1" "someuser" "user_password" "root_password"}
fix_a_host {"host2" "someuser" "user_password" "root_password"}

如果是我,我会将 sed 命令更改为破坏性小得多的命令,例如 grep TEXT/etc/passwd,直到确信它运行良好为止。对于显示您想查看的输出的远程命令,请使用

set results $expect_out(buffer)
send "some_command\r"
expect "#" # use the command prompt to indicate output is complete
puts "command output is got `$buffer`"

关于linux - 期望脚本 su 到 root 并执行 sed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6023982/

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