python的SSH/ftp操作

发布时间 2023-11-18 18:55:37作者: 枫飘过的天1

1.python连接ssh并执行命令 //安装paramiko模块: pip install paramiko
(1)执行单条命令
import paramiko
ssh = paramiko.SSHClient() #创建一个ssh的客户端,用来连接服务器
know_host = paramiko.AutoAddPolicy() #创建一个ssh的白名单
ssh.set_missing_host_key_policy(know_host) #加载创建的白名单
ssh.connect( #连接服务器
hostname = "192.168.1.104",
port = 22,
username = "root",
password = "910921"
)
stdin,stdout,stderr = ssh.exec_command("ls -trl") #远程执行shell命令

print(stdout.read().decode())

ssh.close()

#stdin 标准格式的输入,是一个写权限的文件对象
#stdout 标准格式的输出,是一个读权限的文件对象
#stderr 标准格式的错误,是一个写权限的文件对象

(2)多条命令执行
import paramiko
ssh = paramiko.SSHClient()
know_host = paramiko.AutoAddPolicy()
ssh.set_missing_host_key_policy(know_host)
ssh.connect(
hostname = "192.168.1.104",
port = 22,
username = "root",
password = "910921"
)
cmd = ['ls -trl', 'pwd']
for m in cmd:
stdin,stdout,stderr = ssh.exec_command(m)
print(stdout.read().decode())
ssh.close()

2. ftp文件上传 //使用SFTP上传与下载单线程,速度会很慢。生产大文件使用多线程处理

(1)单文件上传下载
import paramiko
transport = paramiko.Transport(("192.168.1.104", 22)) # 获取Transport实例
transport.connect(username="root", password="910921") # 建立连接
# 创建sftp对象,SFTPClient是定义怎么传输文件、怎么交互文件
sftp = paramiko.SFTPClient.from_transport(transport)
# 将本地 api.py 上传至服务器 /www/test.py。文件上传并重命名为test.py
#print("---文件开始传输---")
sftp.put("C:/Users/18995/Desktop/test.txt", "/root/test.py")
#print("---文件传输完毕---")
# 将服务器 /www/test.py 下载到本地 aaa.py。文件下载并重命名为aaa.py
sftp.get("/root/test.py", "C:/Users/18995/Desktop/test222222.txt")
# 关闭连接
transport.close()

(2)多文件上传下载
import paramiko
transport = paramiko.Transport(("192.168.1.104", 22))
transport.connect(username="root", password="910921")
sftp = paramiko.SFTPClient.from_transport(transport)
up = ['C:/Users/18995/Desktop/test1.txt', 'C:/Users/18995/Desktop/test2.txt', 'C:/Users/18995/Desktop/test3.txt']
for i in [1,2,3]:
for m in up:
sftp.put(m, "/root/test%d" % i)
print("---文件传输完毕---")
#sftp.get("/root/test.py", "C:/Users/18995/Desktop/test222222.txt")
transport.close()
参数传递:%d % i

3.升级上述方式
ssh需要输入:IP 用户名 密码 执行命令
import paramiko
#创建一个ssh的客户端,用来连接服务器
ssh = paramiko.SSHClient()
#创建一个ssh的白名单
know_host = paramiko.AutoAddPolicy()
#加载创建的白名单
ssh.set_missing_host_key_policy(know_host)
#连接服务器
ssh_IP = input('请输入远程服务器地址:')
ssh_user = input('用户名:')
ssh_pass = input('密码:')
ssh_shell = input('请输入执行命令:')

ssh.connect(
hostname = ssh_IP,
port = 22,
username = ssh_user,
password = ssh_pass
)
#执行命令
stdin,stdout,stderr = ssh.exec_command(ssh_shell)
#stdin 标准格式的输入,是一个写权限的文件对象
#stdout 标准格式的输出,是一个读权限的文件对象
#stderr 标准格式的错误,是一个写权限的文件对象
print(stdout.read().decode())
ssh.close()