参考:https://blog.csdn.net/qq_40558166/article/details/100172501
一、官网
https://www.paramiko.org/
二、安装库
1.命令
pip install paramiko
或
pip install paramiko –i https://pypi.douban.com/simple/
三、辅助软件(可忽略)
1.Xshell(执行命令)
根据ip,端口,用户名,密码,连接 linux 的黑窗口(shell窗口)
2.Xftp(传输文件)
根据ip,端口,用户名,密码,连接 linux 文件目录
3.linux服务器
可在本地虚拟机上安装,可以租用“弹性云服务器”(不用的时候删掉不计费)。
四、非交互式连接
每次执行一次命令,相当于打开一个黑窗口。想要在一个窗口执行多条shell语句,用分号隔开。
import paramiko
# 1.创建一个客户端
ssh = paramiko.SSHClient()
# # 2.创建一个白名单
know_host = paramiko.AutoAddPolicy()
# 3.设置不提醒
ssh.set_missing_host_key_policy(know_host)
# 4.连接服务器
ssh.connect(hostname='XXX', port=22, username='root', password='XXX')
# 5.执行linux命令
while True:
commnd = input('请输入命令:')
stdin, stdout, stderr = ssh.exec_command(commnd)
# stdin 标准输入 文件对象 写权限
# stout 标准的输出 文件对象 读权限
# stderr 特殊的输出 文件独享 读权限
# 查看输出结果
print(stdout.read().decode())
# 6.关闭连接
ssh.close()
所遇问题:ls不输出任何内容
原因:登录后,当前所在目录为 /root,此目录下无任何文件。
cd ..;ls
五、交互式连接
连接后,相当于打开一个黑窗口,可在当前窗口分次输入多条命令。
import paramiko
# 创建客户端
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接
ssh.connect(hostname='XXX', port=22, username='root', password='XXX')
# 创建一个shell
shell = ssh.invoke_shell()
shell.settimeout(1)
# 获取命令
command = input('>>') + '\n'
# 发送命令
shell.send(command)
while True:
if command == 'q' + '\n':
break
try:
# 获取返回的结构
recv = shell.recv(65535).decode()
if recv:
print(recv)
else:
continue
except:
command = input('>>') + '\n'
# 发送命令
shell.send(command)
ssh.close()
六、通过python连接ftp(实现上传和下载)
import paramiko
XXX
trans = paramiko.Transport(sock=('XXX'))
trans.connect(username='root', password='XXX')
sftp = paramiko.SFTPClient.from_transport(trans)
# sftp.put('你要上传的文件','上传的位置/文件名')
#sftp.put('2.png','/2.png')#存储的文件名不同,起到重命名的作用
# sftp.get('你要下载的文件','下载的位置/文件名')
sftp.get('/2.png', '2.png')#存储的文件名不同,起到重命名的作用
sftp.close()