获取交互式SSH shell是实现自动化配置、自动化发布、自动化管理等重要操作的关键。Python作为一种高级编程语言,提供了丰富的模块和工具来帮助我们实现自动化操作。下面是获取交互式SSH shell的方法的完整攻略。
使用paramiko模块获取SSH shell
Paramiko是一个Python库,可以用于SSHv2协议的加密与认证。它支持Python 2.7和Python 3.4及以上版本。使用paramiko模块可以轻松地实现获取SSH shell的操作流程,具体代码如下:
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('your_host', port=22, username='your_username', password='your_password')
chan = ssh.invoke_shell()
while True:
resp = chan.recv(9999)
if not resp:
break
print(resp.decode('utf-8'))
stdin = chan.makefile('wb')
stdout = chan.makefile('r')
stdin.write(b'your_command\n')
stdout.read()
stdin.close()
stdout.close()
ssh.close()
上面的代码首先使用paramiko的SSHClient建立与目标主机的SSH连接,然后使用invoke_shell()方法获取SSH通道。接着通过makefile()方法获取标准输入输出的通道,最后使用write()方法写入要执行的命令并使用read()方法读取输出结果。
使用pexpect模块获取SSH shell
pexpect是一个Python模块,它是实现自动化交互的强大工具。pexpect可以仿真人的动作来实现与目标系统的交互。这个过程包括发送命令、等待响应、检查输出结果等。具体代码如下:
import pexpect
ssh_newkey = 'Are you sure you want to continue connecting'
hostname = 'your_host'
password = 'your_password'
username = 'your_username'
command = 'your_command'
ssh_conn = pexpect.spawn('ssh ' + hostname + ' ' + command)
ret = ssh_conn.expect([pexpect.TIMEOUT, ssh_newkey, '[P|p]assword:'])
if ret == 0:
print('Error: ssh connection timeout')
return None
if ret == 1:
ssh_conn.sendline('yes')
ret = ssh_conn.expect([pexpect.TIMEOUT, '[P|p]assword:'])
if ret == 0:
print('Error: ssh connection timeout')
return None
ssh_conn.sendline(password)
ssh_conn.expect('#')
print(ssh_conn.before)
上面的代码首先使用spawn()方法建立与目标主机的SSH连接,然后使用expect()方法等待连接请求的响应。接着通过sendline()方法发送密码和要执行的命令,并使用expect()方法等待命令执行的结果。最后使用before属性读取输出结果。
以上就是使用Python获取交互式SSH shell的方法攻略,希望对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python获取交互式ssh shell的方法 - Python技术站