AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 441788
Accepted
larsks
larsks
Asked: 2012-10-25 05:43:30 +0800 CST2012-10-25 05:43:30 +0800 CST 2012-10-25 05:43:30 +0800 CST

创建一个伪终端让 sudo 开心

  • 772

我需要自动配置云实例(运行 Fedora 17),以下初始事实为真:

  • 我有基于 ssh 密钥的远程用户访问权限 ( cloud)
  • 该用户通过sudo.

手动配置就像登录和运行一样简单sudo su -,但我想完全自动化这个过程。诀窍是系统默认为requiretty启用该选项sudo,这意味着尝试执行以下操作:

ssh remotehost sudo yum -y install puppet

将失败:

sudo: sorry, you must have a tty to run sudo

我现在正在解决这个问题,首先推送一个将在伪终端上运行命令的小 Python 脚本:

import os
import sys
import errno
import subprocess

pid, master_fd = os.forkpty()

if pid == 0:
    # child process: now that we're attached to a
    # pty, run the given command.
    os.execvp(sys.argv[1], sys.argv[1:])
else:
    while True:
        try:
            data = os.read(master_fd, 1024)
        except OSError, detail:
            if detail.errno == errno.EIO:
                break

        if not data:
            break

        sys.stdout.write(data)

    os.wait()

假设这是 named pty,然后我可以运行:

ssh remotehost ./pty sudo yum -y install puppet

这工作正常,但我想知道是否有我没有考虑过的可用解决方案。

  • 我通常会考虑expect,但默认情况下它没有安装在这个系统上。
  • screen可以在紧要关头做到这一点,但我想到的最好的是:

    screen -dmS sudo somecommand
    

    ...这确实有效但会吃掉输出。

是否有任何其他可用的工具可以为我分配一个普遍可用的伪终端?

cloud
  • 1 1 个回答
  • 1995 Views

1 个回答

  • Voted
  1. Best Answer
    mgorven
    2012-10-25T14:18:28+08:002012-10-25T14:18:28+08:00

    您想要ssh-t的选项:

     -t      Force pseudo-tty allocation.  This can be used to execute
             arbitrary screen-based programs on a remote machine, which can be
             very useful, e.g. when implementing menu services.  Multiple -t
             options force tty allocation, even if ssh has no local tty.
    

    -tt如果脚本将以非交互方式运行,您可能需要使用。

    • 6

相关问题

  • 您如何进行云 ROI 分析?您是否正在迁移到云,如果是,首先要迁移到哪些系统?[关闭]

  • 如何预先签署 puppet 证书?

  • 使用云服务器时是否存在性能权衡?

  • 可扩展的云软件?

  • 哪些云服务将在 2015 年出现?[关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve