Jon*_*Jon 21 python ssh paramiko
我正在尝试使用Paramiko连接到远程主机并执行一些文本文件替换.
i, o, e = client.exec_command("perl -p -i -e 's/" + initial + "/"
+ replaced + "/g'" + conf);
Run Code Online (Sandbox Code Playgroud)
其中一些命令需要以sudo身份运行,这会导致:
sudo:对不起,你必须有一个tty来运行sudo
我可以使用-t开关和ssh强制伪tty分配.
是否有可能使用paramiko做同样的事情?
Mac*_*zuk 36
实际上这很简单.只是:
stdin, stdout, stderr = client.exec_command(command, get_pty=True)
Run Code Online (Sandbox Code Playgroud)
小智 22
以下代码适用于我:
#!/usr/bin/env python
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('localhost',username='root',password='secret')
chan = ssh.get_transport().open_session()
chan.get_pty()
chan.exec_command('tty')
print(chan.recv(1024))
Run Code Online (Sandbox Code Playgroud)
这只是通过在线查看几个例子来组装的......不确定它是否是"正确"的方式.
根据sudo手册页:
-S(stdin)选项使sudo从标准输入而不是终端设备读取密码.密码必须后跟换行符.
您可以写入stdin,因为它是一个带write()的文件对象:
import paramiko
client = paramiko.client.SSHClient()
client.set_missing_host_key_policy(paramiko.client.AutoAddPolicy())
client.connect(hostname='localhost', port=22, username='user', password='password')
stdin, stdout, stderr = client.exec_command('sudo -S aptitude update')
stdin.write('password\n')
stdin.flush()
# print the results
print stdout.read()
client.close()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19407 次 |
| 最近记录: |