When operating system maintenance, the SSH command is usually connected to the remote server for some operations. How to do this in Python, of course, can also execute SSH commands, but there is a more elegant way, with the help of Paramiko, which implements the SSHV2 protocol of an open source project, the following mainly uses its SSH and SFTP client related functions.
Installation
# pip Install Paramiko
SSH client Use
In [1]: Import Paramiko
#获取SSHClient对象.
In [2]: SSH = Paramiko. Sshclient ()
#设置host key policy.
#ssh. Load_system_host_keys ('/root/.ssh/known_hosts ')
In [3]: Ssh.set_missing_host_key_policy (Paramiko. Autoaddpolicy ())
#连接到SSH server, the Connect method has several parameters that can be set as needed, such as a time-out (timeout).
In [4]: Ssh.connect (' 192.168.1.4 ')
Executes a command on #在SSH server, returning its I/O stream, similar to a file handle in Python, standard output (STDOUT) and standard error (STDERR) are more commonly used.
In [5]: stdin, stdout, stderr = Ssh.exec_command (' ls-l/tmp/')
#获取标准输出
In [all]: for line in stdout:
...: print ' + ' + line.strip (' \ n ')
...:
--Total 16
--rw-r--r--1 root root 2 Jan 18:27 a.txt
--rw-r--r--1 root root 2 Jan 18:27 b.txt
--rw-r--r--1 root root 2 Jan 18:27 c.txt
--rw-r--r--1 root root 2 Jan 18:27 d.txt
SFTP Client Use
#在连接到SSH server, gets the Sftpclient object.
SFTP = Ssh.open_sftp ()
#上传文件
In []: Sftp.put ('/tmp/zz.txt ', '/tmp/')
---------------------------------------------------------------------------
IOError Traceback (most recent)
<ipython-input-13-0e19a403e0d2> in <module> ()
----> 1 sftp.put ('/tmp/zz.txt ', '/tmp/')
/usr/local/python27/lib/python2.7/site-packages/paramiko/sftp_client.pyc in put (self, localpath, RemotePath, Callback, confirm)
...
Ioerror:failure
In [14]:
Why the error, the command line test normal ...
# SFTP 192.168.1.4
Connected to 192.168.1.4.
Sftp> put '/tmp/zz.txt '/tmp '
Uploading/tmp/zz.txt To/tmp/zz.txt
/tmp/zz.txt 100% 3 0.0kb/s 00:00
Sftp>
When viewing the Put method in sftp_client.py, the RemotePath parameter is found and the name of the target file needs to be indicated.
:p Aram Str remotepath:the destination path on the SFTP server. Note
That's the filename should be included. Only specifying a directory
May result in an error.
That's all you can do.
in [+]: sftp.put ('/tmp/zz.txt ', '/tmp/zz.txt ')
OUT[21]: <sftpattributes: [size=3 uid=901 gid=901 mode=0100664 atime=1516792881 mtime=1516792881]>
#关闭连接
In []: Sftp.close ()
in [+]: Ssh.close ()
If interested, you can follow the subscription number "database Best practices" (Dbbestpractice).
Implementation of the SSH protocol in Python-Paramiko