当前位置: 首页 > 面试题库 >

使用结构切换到其他用户

宗政文彬
2023-03-14
问题内容

我最近开始研究用于远程部署的结构。我需要切换到差异用户(从我登录时所用的用户),并且无法弄清楚。有可能吗?我当前的用户没有sudo权限。

我尝试更改以下环境变量

env.sudo_prefix = "su newUser -c "
env.sudo_prompt = "Password:"

但是结构不等待’newUser’的密码输入并且失败。

out: Password: 
[oldUser@ec2-111-11-111-111.compute-1.amazonaws.com] out: su: incorrect password

Fatal error: sudo() received nonzero return code 1 while executing!

Requested: touch x
Executed: su newUser -c  -u "root"  /bin/bash -l -c "cd /home/oldUser/upgrade && touch x"

Aborting.
Disconnecting from oldUser@ec2-111-11-111-111.compute-1.amazonaws.com... done.

更新:

正如JF Sebastian所建议的那样,su newUser -c它可以工作,但它会为每台服务器的每个命令提示密码,这违背了自动化的目的。Fabric中是否有任何方法可以根据提示传递相同的值(在这种情况下,始终为Password:


问题答案:

感谢JF Sebastian,有很多收获。

  1. Fabric懒惰地建立连接,因此我不得不在调用su之前进行虚拟连接以避免上下文切换。
  2. Pwd需要存储在全局范围内,以便可以重用。Fabric不会将其放入缓存中以覆盖su命令。

这就是最终要做的事情。它的工作。

pwd = None
@hosts('myhost.com')
def test():
    with cd('/home/oldUser/upgrade'):
        run('ls')  #This is to connect aggressively (instead of lazily)
        global pwd  #Change the scope of pwd
        if pwd is None:
            pwd = getpass.getpass('enter password for newUser')

        execute(su, pwd, 'newUser', 'touch x')  
        run ('ls')
        execute(su, pwd, 'newUser', 'rm x') 
        run ('ls')

def su(pwd, user, command):
    with settings(
        password= "%s" % pwd,
        sudo_prefix="su %s -c " % user,
        sudo_prompt="Password:"
        ):
        sudo(command)


 类似资料:
  • 本节介绍MATLAB中的一些其他数据结构,包括: 多维数组 单元数组 字符与文本 结构体

  • 问题内容: 我有这个bean 我想序列化为 (或作为json) 我应该如何做,最好使用jaxb注释? 我正在使用运动衫,但答案不必特定于它。 问题答案: 接下来呢? 使用EclipseLink JAXB(MOXy),您可以执行以下操作。注意:我是MOXy技术负责人。 测试 领域 SomeValueAdapter 字段适配器 AdaptedField 演示版 导入java.io.File; inpu

  • 现在我和杰克逊一起工作,我有一些问题。 首先。我有两个服务,第一个是数据收集和发送服务,第二个是接收这些数据,例如,将其记录到文件中。 因此,第一个服务具有如下类层次结构: 第二个服务具有如下类层次结构: 第一个服务对无所知。 我在第一个服务上发送数据的方式: 所以,我想将json拟人化为的Collection,而不是的Collection(

  • 在sentinel进行切换时还会自动调用一个脚本(如果设置的话),做一些自动化操作,比如如果我们需要一个虚拟IP永远飘在Master上(这个VIP可不是被应用用来连接redis 的,用过的人都知道连接redis sentinel并不依赖于VIP的),那么可以在sentinel配置文件中配置: sentinel client-reconfig-script mymaster /redis/scrip

  • 本文向大家介绍svn 将工作副本切换到其他分支,包括了svn 将工作副本切换到其他分支的使用技巧和注意事项,需要的朋友参考一下 示例 可以快速转换现有的工作副本以反映同一存储库中不同分支的内容。例如,您可能有主干的工作副本,现在需要在开发分支上工作。您可以使用以下svn switch命令来有效地修改现有的工作副本,而不必检出一个全新的工作副本(这会浪费大量时间和磁盘空间): 现在,您的工作副本将反

  • 问题内容: 首先,我要说我是Ant的新手。就像之前一样,我只是在两天前才开始学习它以完成此任务。 我想要做的是创建一个“ master”蚂蚁脚本,该脚本调用其他几个蚂蚁脚本。例如: 现在,我拥有用于​​A,B和C的所有单独版本。通过这个,我的意思是我可以从这些文件夹中的任何一个运行“ ant”,它将构建项目并生成一个jar文件。如果以这种方式构建A,B和C,则我有3个jar文件。然后,我可以将它们