1. 安装Python包
在开始使用Python连接Linux命令行之前,我们需要安装一个Python包来实现这个功能。这个包叫作paramiko
,它是一个用于SSH2的Python实现。我们可以使用以下命令来安装它:
pip install paramiko
安装完成后,我们可以开始编写Python代码来连接Linux命令行。
2. 创建SSH连接
使用paramiko
包,我们可以创建一个SSH连接对象,并通过该对象执行Linux命令。我们需要导入paramiko
和time
包,并定义一些变量来存储连接信息:
import paramiko
import time
host = '192.168.1.100' # Linux主机的IP地址
port = 22 # SSH默认端口号
username = 'username' # Linux用户名
password = 'password' # Linux密码
# 创建SSH连接
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.load_system_host_keys()
ssh_client.connect(hostname=host, port=port, username=username, password=password)
这段代码首先导入paramiko
和time
包,并定义了要连接的Linux主机的信息。接下来,我们创建了一个SSH连接对象ssh_client
,并设置了一些连接的配置。然后,使用connect()
方法连接到Linux主机。
3. 执行Linux命令
一旦成功建立SSH连接,我们就可以执行任意的Linux命令。下面是如何执行Linux命令的示例代码:
# 执行Linux命令
stdin, stdout, stderr = ssh_client.exec_command('ls')
# 读取命令执行结果
output = stdout.read().decode()
print(output)
# 关闭SSH连接
ssh_client.close()
这段代码中,我们使用exec_command()
方法执行了一个Linux命令ls
,并将命令的执行结果存储在stdout
变量中。然后,我们使用read()
方法读取执行结果,并用decode()
方法将其转换为字符串格式。最后,我们打印出执行结果,并使用close()
方法关闭SSH连接。
3.1 自定义命令
除了执行简单的Linux命令,我们还可以执行自定义的命令和脚本。例如,我们可以执行一个复杂的Shell脚本:
script = '''
#!/bin/bash
echo "Hello, World!"
'''
# 执行Shell脚本
stdin, stdout, stderr = ssh_client.exec_command(script)
# 读取脚本执行结果
output = stdout.read().decode()
print(output)
在这个示例中,我们定义了一个Shell脚本,然后使用exec_command()
方法执行它。执行结果和之前的示例一样,可以将其打印出来。
4. 获取命令执行结果
在前面的示例中,我们使用stdout.read()
方法获取了命令执行结果。然而,在大多数情况下,我们可能需要一次性获取所有命令的执行结果,而不是逐行获取。为了实现这个目的,我们可以使用invoke_shell()
方法来创建一个交互式的Shell会话,并使用recv()
方法来读取执行结果。
# 创建交互式Shell会话
shell = ssh_client.invoke_shell()
# 执行多个命令
commands = [
'echo "command 1"',
'echo "command 2"',
'echo "command 3"'
]
command_string = '; '.join(commands)
shell.send(command_string + '\n')
# 读取命令执行结果
output = ''
while True:
if shell.recv_ready():
output += shell.recv(1024).decode()
else:
time.sleep(0.1)
if not shell.recv_ready():
break
print(output)
在这段代码中,我们使用invoke_shell()
方法创建了一个交互式的Shell会话,并将其赋值给shell
变量。然后,我们定义了多个命令,并将它们连接成一个字符串command_string
。接下来,我们使用send()
方法将命令发送到Shell会话中,并使用recv()
方法读取执行结果。由于recv()
方法是阻塞的,我们需要在读取到所有结果之前等待一段时间。最后,我们打印出结果。
5. 总结
通过使用paramiko
包,我们可以方便地使用Python连接Linux命令行。我们可以创建SSH连接对象,执行Linux命令,并获取命令执行结果。这为我们自动化一些管理任务提供了便利。无论是执行简单的命令还是复杂的脚本,paramiko
包都可以满足我们的需求。
6. 参考文献
[1] paramiko documentation. https://docs.paramiko.org/