我想使用paramikossh 进入一堆远程节点并运行一些具有root特权的命令行
我的主目录中有 ssh 密钥,因此当我通过 ssh 进入这些远程节点时不需要输入密码
但是在运行以下脚本时:
def connect(hostname):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname, username='niky', pkey=paramiko.RSAKey.from_private_key(open('id_rsa'), 'passwd'), timeout = 240.0) return ssh
def run(hostname):
ssh = connect(hostname)
(stdin, stdout, stderr) = ssh.exec_command("sudo ls")
res = stderr.readlines()
print hostname+': '+''.join(str(elem) for elem in res)+'\n'
run(remote.nity.com)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
remote.nity.com: sudo: no tty present and no askpass program specified
Run Code Online (Sandbox Code Playgroud)
如果我sudo在ls
一切正常之前不添加,潜在的原因是什么?谢谢!
在库存sudoers配置中,通常存在以下行:
Defaults requiretty
这既安全又符合您在大多数用例中所需要的。
在您的情况下,您需要为特定用户覆盖此默认值,因此您可以编写如下:
Defaults:niky !requiretty
另外,您需要定义一条允许无密码niky调用的线路sudo:
niky remote.nity.com = (root)NOPASSWD: /bin/ls
该行意味着允许用户无需密码即可niky执行。/bin/lsrootremote.nity.com
进一步的参考可以在这里找到。
| 归档时间: |
|
| 查看次数: |
16190 次 |
| 最近记录: |