linux 如何使用Paramiko将用户输入发送到我的主机?

bqf10yzr  于 2022-11-22  发布在  Linux
关注(0)|答案(1)|浏览(137)

我正在尝试使用python和paramiko自动化部署一个Linux服务器。问题是,当我第一次连接到这个定制的Linux操作系统时,它会要求提供它的初始“安装程序”的参数。
在设置这些参数之前,您不能对服务器执行任何操作。第一个参数是设置新密码,终端会提示您,如下所示。

*WARNING: Your password has expired.
You must change your password now and login again!
New password:

我不知道如何发送基本的用户输入,比如一个新的密码。据我所知,exec_command 实际上是期望linux命令而不仅仅是一串字符传递到终端。
如何简单地连接并向终端发送一个原始字符串来完成此操作?
这是我尝试过的,但不起作用:

import paramiko
ssh = paramiko.SSHClient()

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect('my_host', username='admin', key_filename='My path to private key file')

stdin, stdout, stderr = ssh.exec_command('sleep 10')

stdin.write('NewPassword')
stdin.write('NewPassword')

ssh.close()
eoxn13cs

eoxn13cs1#

我使用***.invoke_shell***方法和***.send***方法找到了解决方案。通道打开后,我使用.send传递输入,然后使用.recv获得反馈并确保安装程序继续运行。我只是简单地重复了这一过程,以获得所有需要的输入。现在,我将把它转换为一个函数以简化流程。

import paramiko
import time

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect('my_ip_address', username='admin', key_filename='Path to my private key file')

chan = ssh.invoke_shell()
time.sleep(5)
output = chan.recv(1000)
print(output)
chan.send('New_Password\n')
time.sleep(10)
output = chan.recv(1000)
print(output)

相关问题