Python3中的paramiko模块,基于SSH用于连接远程服务器并执行相关操作
http://docs.paramiko.org/en/2.1/
SSHClient 用于连接远程服务器并执行基本命令
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import paramiko # 创建SSH客户端对象 ssh = paramiko.SSHClient() # 允许连接不再know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接服务器 ssh.connect(hostname="172.16.110.218", port=22, username="root", password="******") # 执行命令 stdin, stdout, stderr = ssh.exec_command("ls /local/jet") # 获取命令执行结果 result = stderr.read() result = result if result else stdout.read() print(str(result.decode("gbk"))) # 关闭连接 ssh.close()
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import paramiko # 读取私钥文件 private_key = paramiko.RSAKey.from_private_key_file("e:\id_rsa") # 创建SSH对象 ssh = paramiko.SSHClient() # 允许连接不再known_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接服务器 ssh.connect(hostname="172.16.110.218", port=22, username="root", pkey=private_key) # 执行命令 stdin, stdout, stderr = ssh.exec_command("ls /local/jet") # 获取命令执行结果 result = stderr.read() result = result if result else stdout.read() print(str(result.decode("gbk"))) # 关闭连接 ssh.close()
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import paramiko from io import StringIO key_str = """-----BEGIN RSA PRIVATE KEY----- MIIEoQIBAAKCAQEA6eXFQDFRT+tbtnsw44+16fZa1cZF7nouFVRuIuEZx93Gu9Kr jBW2MFO/uyREHFK20xQzfX/jcD6/R1Yxh7jtLtN/uIUC3mV6yV/WjTmidH1ABlvq wWyF2i6Q0ZS3bmznuvi/Z1BVJQan9DaH17aQSA/xsKM08OPEO8PK7tuaXlzokj/7 Tb14vOUnxN8C79iBcifoIlq6zpu2SlJpu/YUc3jX6nqJEtG/XwYHfTvwXGwlLCtD VOb8NtwjggmRbELNZ6QCY8rNo+xUP+9tnp6xa6io8gDg7yswaAvQBxe3F6NZCtc/ sOceTKUIosYZi45tDqfL9YashOvbUNjkSLXQZQIBIwKCAQANXZY+LrQwc9la4nfS fT2YVzhj/LOJ+FpnnmyxiTSsVdDXiGGS+e0nVT4n83GbN+0wohGSJJCnVAruIi63 TGVTIgdMX18/6Iqsa+Bf12hebY6hRxS6mHytYb8h6z2uieFbJCgxyhN+dWiu3otr aYSWZ0+jsY3/IvVFPmNeGy1kejp2qDYWxznzQwCCXpuVNJwXgYjTzdSDGm/GQeao sSuQlz6eRwI06KTuKw1s9tuMpcyhcvqWA7cApR5vNoGQVdUiYKdBuljr7hoo3oPX NdIuml09IpwyEnc1DDmpR1ynlFadScAyNLa6GQYI8y6tz5mudRiHxskDHG2Y0pl2 XlqTAoGBAPiaKEi/cApypdcensuaBmhKlnGyzsg2qPY2v0Uy7L8mSfDxumkRfJN1 PRao0bAsIwH0sTz4ImXU9ObXnV2Etrg+oCPTJ0hCjnc2Irfl4v+yvicbxrklbkxC kWlcfW2TQ/h38mLZ93veu0j67eXYhgZQ7dPMFXcupPFutfAI8cFPAoGBAPDbl/// rvgpKse8yJSiuW2MNpv0+euhpBwGEeAA7Nrq2B8m5XljbeWh14Xhij4S86YuHeUb g5PWnagQMliJrgNPaG+SZnFAlxM+lrKCjdOJXSIoXHpdeb4FJHWYOXQPu3TSWjlo VSS1M9YLOILRV2VQuMrhWnef1WvvvXaoUN4LAoGBAL/HYOepn5MH/EbdG2ndOCSR T3xIG9xHbGYqO8eq8SW+c438TflIAQQJ++zoocJrMPLhVYbOC+gn8B/K5xxBzsil VvcQmqV1LBLR/YaMxQ5lUNxXQYeDRnVX7IR6jKT8k4UpVJVmUTOr0k496rift9j8 mjWsEI8j+5WtLUQkKDYJAoGAPe9S+K92Io4+M1xuF5eOxGXiKBpsJqXoXvo/HFgC ZC3Ci6rqjO2ui4FjTk/wWRrQ8De+i17YsPysMofSbonNqRRrT+PRMxCb4GCNJpaZ f4m43OXOox9Z0cbO3Gj41LOWmmH58YE6dydH1/RBuz0lGg1xWL2a64+ABc/u4/9l QGkCgYAt3cW6UxKVdWejiZ/PRzsffdKuPjm9tTZu9hVBW8CzJD1byaeT8czjKtzv kKwhV8yqG0ZGqmGbxc00zJLh4pk1J45Nh0dLzAD0T6SskmmJQrJ+k1KPFzqDHj1H 9KRVifIb6WKYBdWF6JXo2nBhlsSymBGPXSnY4YXbsNfWGQDm6g== -----END RSA PRIVATE KEY----- """ private_key = paramiko.RSAKey(file_obj=StringIO(key_str)) # 连接服务器 transport = paramiko.Transport(('172.16.110.218', 22)) transport.connect(username='root', pkey=private_key) ssh = paramiko.SSHClient() ssh._transport = transport # 执行命令 stdin, stdout, stderr = ssh.exec_command('df') # 获取命令执行结果 result = stderr.read() result = result if result else stdout.read() print(str(result.decode("gbk"))) # 关闭连接 transport.close()
SFTPClient 用于连接远程服务器并执行上传下载
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import paramiko # 连接远程服务器 transport = paramiko.Transport(("172.16.110.218", 22)) transport.connect(username="root", password="*****") # 生成SFTPClient对象 sftp = paramiko.SFTPClient.from_transport(transport) # 上传文件get('local_path', 'remote_path') sftp.put("/local/script/demo.py", "e:\demo.py") # 下载文件get('remote_path','local_path') sftp.get("e:\demo.py", "/local/script/demo.py") # 关闭连接 transport.close()
参考资料