paramiko库实现远程登录主机上传下载

Posted 韶光年华

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了paramiko库实现远程登录主机上传下载相关的知识,希望对你有一定的参考价值。


     paramiko 模块是基于 Python 实现的 SSH 远程安全连接,用于 SSH 远程执行命令、文件传输等功能。

      默认 Python 没有,需要手动安装: pip install paramiko。如安装失败,可以尝试 yum 安装: yum install python-paramiko

安装完成后,可以正常导入,如下图:

paramiko库实现远程登录主机、上传下载_python下载


1. 登录远程机器执行命令

1.1 登录单台机器执行命令


1.1.1 脚本名:myssh.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import paramiko
import sys
ip=sys.argv[1]
cmd=sys.argv[2]
transport = paramiko.Transport( ip, 22 )
pkey = paramiko.RSAKey.from_private_key_file( /root/.ssh/id_rsa )
transport.connect( username = root, pkey = pkey )
ssh = paramiko.SSHClient()
ssh._transport = transport
stdio, stdout, stderr = ssh.exec_command( cmd )
channel = stdout.channel
status = channel.recv_exit_status()
stdout = stdout.read()
stderr = stderr.read()

ssh.close()
transport.close()

print( "stdout is : " + "\\n" + stdout )
print( "stderr is " + stderr )
print( "status is " + str(status) )


1.1.2 脚本传参解释

ip=sys.argv[1]  # 传入第一个参数ip

cmd=sys.argv[2] # 传入第二个参数要执行的命令

1.1.3 执行

python myssh.py 192.168.0.168 "free -g"

1.1.4 执行结果如下

paramiko库实现远程登录主机、上传下载_python批量执行_02


1.2 登录多台机器执行命令

1.2.1 脚本名:myfunc.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import paramiko
def myCommand(ip, port, username, cmd):
transport = paramiko.Transport(ip, port)
pkey = paramiko.RSAKey.from_private_key_file( /root/.ssh/id_rsa )
transport.connect( username = username, pkey = pkey )
ssh = paramiko.SSHClient()
ssh._transport = transport
stdio, stdout, stderr = ssh.exec_command( cmd )
channel = stdout.channel
status = channel.recv_exit_status()
stdout = stdout.read()
stderr = stderr.read()
#print( "stdout is " + stdout )
return "ip": ip, "status": status, "stdout": stdout, "stderr": stderr

ssh.close()
transport.close()
def myOpen(filename):
with open (filename, "r") as f:
for i in f:
result = myCommand( i , 22, root, "free -g|grep Mem|awk print $2" )
print result


if __name__ == "__main__":
myOpen("/opt/software/test_python/test/ips")
1.2.2 脚本解释

封装了2个函数,myCommand和myOpen

myCommand(ip, port, username, cmd)  #传入要执行的ip、端口、用户名和命令,返回了字典,字典值可以自定义

myOpen(filename)   #传入要执行的ip列表

paramiko库实现远程登录主机、上传下载_python批量执行_03


1.2.3 执行

执行:python myfunc.py

1.2.4 执行结果如下

paramiko库实现远程登录主机、上传下载_python_04


2. 实现文件上传

2.1 脚本名:myput.py

#!/usr/bin/python
# -*- coding: utf-8 -*-
import paramiko
import sys
ip=sys.argv[1]
source_file=sys.argv[2]
des_file=sys.argv[3]
transport = paramiko.Transport( ip, 22 )
pkey = paramiko.RSAKey.from_private_key_file( /root/.ssh/id_rsa )
transport.connect( username = root, pkey = pkey )

sftp = paramiko.SFTPClient.from_transport( transport )
result = sftp.put(source_file, des_file)

sftp.close()
transport.close()


2.2 脚本传参解释

ip=sys.argv[1]    # 传入第一个参数ip

source_file=sys.argv[2]  #要上传的文件

des_file=sys.argv[3]   #上传的目的地

2.3 执行

python myput.py 192.168.0.169 "/opt/software/test_python/test/ips" "/opt/ips"

2.4 执行结果如下

paramiko库实现远程登录主机、上传下载_paramiko_05

paramiko库实现远程登录主机、上传下载_python下载_06



3. 实现文件下载

3.1 脚本名:myget.py

#!/usr/bin/python
# -*- coding: utf-8 -*-
import paramiko
import sys
ip=sys.argv[1]
source_file=sys.argv[2]
des_file=sys.argv[3]
transport = paramiko.Transport( ip, 22 )
pkey = paramiko.RSAKey.from_private_key_file( /root/.ssh/id_rsa )
transport.connect( username = root, pkey = pkey )

sftp = paramiko.SFTPClient.from_transport( transport )
result = sftp.get( source_file, des_file )

sftp.close()
transport.close()

3.2 脚本传参解释

ip=sys.argv[1]    # 传入第一个参数ip

source_file=sys.argv[2]  #要下载的远程文件

des_file=sys.argv[3]   #下载到本地

3.3 执行

myget.py 192.168.0.169 "/opt/ips" "/opt/software/test_python/test/ips"

3.4 执行结果如下

paramiko库实现远程登录主机、上传下载_python上传_07








以上是关于paramiko库实现远程登录主机上传下载的主要内容,如果未能解决你的问题,请参考以下文章

python paramiko模块:远程连接服务器

Python远程连接主机之paramiko模块

使用Paramiko库ssh远程主机

python之paramiko模块

远程执行命令:paramiko

paramiko模块