Package plumbum.machines¶
- class plumbum.machines.base.BaseMachine[source]¶
This is a base class for other machines. It contains common code to all machines in Plumbum.
- get(cmd, *othercommands)[source]¶
This works a little like the
.getmethod with dict’s, only it supports an unlimited number of arguments, since later arguments are tried as commands and could also fail. It will try to call the first command, and if that is not found, it will call the next, etc. Will raise if no file named for the executable if a path is given, unlike[]access.Usage:
best_zip = local.get('pigz','gzip')
- Return type:
- __contains__(cmd)[source]¶
Tests for the existence of the command, e.g.,
"ls" in plumbum.local.cmdcan be anything acceptable by__getitem__.- Return type:
- property encoding¶
This is a wrapper for custom_encoding
- class plumbum.machines.base.PopenAddons[source]¶
This adds a verify to popen objects to that the correct command is attributed when an error is thrown.
- verify(retcode, timeout, stdout, stderr)[source]¶
This verifies that the correct command is attributed.
- Return type:
- __weakref__¶
list of weak references to the object
- class plumbum.machines.base.PopenWithAddons(*args, **kwargs)[source]¶
- __init__(*args, **kwargs)¶
- classmethod __subclasshook__(other)¶
Abstract classes can override this to customize issubclass().
This is invoked early on by abc.ABCMeta.__subclasscheck__(). It should return True, False or NotImplemented. If it returns NotImplemented, the normal algorithm is used. Otherwise, it overrides the normal algorithm (and the outcome is cached).
- __weakref__¶
list of weak references to the object
- class plumbum.machines.env.BaseEnv(path_factory, pathsep, *, _curr)[source]¶
The base class of LocalEnv and RemoteEnv
- __call__(*args, **kwargs)[source]¶
A context manager that can be used for temporal modifications of the environment. Any time you enter the context, a copy of the old environment is stored, and then restored, when the context exits.
- __iter__()[source]¶
Returns an iterator over the items
(key, value)of current environment (like dict.items)
- __hash__ = None¶
- __contains__(name)[source]¶
Tests whether an environment variable exists in the current environment
- Return type:
- __getitem__(name)[source]¶
Returns the value of the given environment variable from current environment, raising a
KeyErrorif it does not exist- Return type:
- get(name, default=None)[source]¶
- Overloads:
self, name (str), default (None) → str | None
self, name (str), default (str) → str
Returns the keys of the current environment (like dict.keys)
- __delitem__(name)[source]¶
Deletes an environment variable from the current environment
- Return type:
- __setitem__(name, value)[source]¶
Sets/replaces an environment variable’s value in the current environment
- Return type:
- property path¶
The system’s
PATH(as an easy-to-manipulate list)
- property home¶
Get or set the home path
- property user¶
Return the user name, or
Noneif it is not set
- class plumbum.machines.env.EnvPathList(path_factory, pathsep)[source]¶
- class plumbum.machines.local.AsyncLocalMachine[source]¶
Async version of LocalMachine.
This class provides async access to local commands and utilities. It delegates to the sync LocalMachine for command lookup and wraps the results in AsyncLocalCommand.
Example:
from plumbum.machines.local import async_local # Command lookup delegates to sync local machine ls = async_local["ls"] # Execution is async result = await ls("-la")
Added in version 2.0.
- __getitem__(cmd)[source]¶
Get an async command by name or path.
This delegates to local[cmd] to get the sync command, then wraps it.
- Return type:
- Args:
cmd: Command name (will be looked up in PATH) or LocalPath
- Returns:
AsyncLocalCommand instance
- Raises:
CommandNotFound: If command is not found in PATH
- property cwd¶
Current working directory.
- property env¶
Environment variables.
- __weakref__¶
list of weak references to the object
- class plumbum.machines.local.LocalCommand(executable, encoding='auto')[source]¶
-
- popen(args=(), cwd=None, env=None, **kwargs)[source]¶
Spawns the given command, returning a
Popen-like object.Note
When processes run in the background (either via
popenor& BG), their stdout/stderr pipes might fill up, causing them to hang. If you know a process produces output, be sure to consume it every once in a while, using a monitoring thread/reactor in the background. For more info, see #48- Parameters:
- Return type:
- Returns:
A
Popen-like object
- class plumbum.machines.local.LocalEnv[source]¶
The local machine’s environment; exposes a dict-like interface
- class plumbum.machines.local.LocalMachine[source]¶
The local machine (a singleton object). It serves as an entry point to everything related to the local machine, such as working directory and environment manipulation, command creation, etc.
Attributes:
cwd- the local working directoryenv- the local environmentcustom_encoding- the local machine’s default encoding (sys.getfilesystemencoding())
- classmethod clear_program_cache()[source]¶
Clear the program cache, which is populated via
machine.which(progname)calls.This cache speeds up the lookup of a program in the machines PATH, and is particularly effective for RemoteMachines.
- Return type:
- classmethod which(progname)[source]¶
Looks up a program in the
PATH. If the program is not found, raisesCommandNotFound- Parameters:
progname (
str) – The program’s name. Note that if underscores (_) are present in the name, and the exact name is not found, they will be replaced in turn by hyphens (-) then periods (.), and the name will be looked up again for each alternative- Return type:
- Returns:
- path(*parts)[source]¶
A factory for
LocalPaths. Usage:p = local.path("/usr", "lib", "python2.7")- Return type:
- __getitem__(cmd)[source]¶
Returns a Command object representing the given program.
cmdcan be a string or aLocalPath; if it is a path, a command representing this path will be returned; otherwise, the program name will be looked up in the system’sPATH(usingwhich). Usage:ls = local["ls"]
- Return type:
- daemonic_popen(command, cwd='/', stdout=None, stderr=None, append=True)[source]¶
On POSIX systems:
Run
commandas a UNIX daemon: fork a child process to setpid, redirect std handles to /dev/null, umask, close all fds, chdir tocwd, then fork and execcommand. Returns aPopenprocess that can be used to poll/wait for the executed command (but keep in mind that you cannot access std handles)On Windows:
Run
commandas a “Windows daemon”: detach from controlling console and create a new process group. This means that the command will not receive console events and would survive its parent’s termination. Returns aPopenobject.Note
this does not run
commandas a system service, only detaches it from its parent.Added in version 1.3.
- Return type:
- list_processes()[source]¶
Returns information about all running processes (on POSIX systems: using
ps)Added in version 1.3.
- pgrep(pattern)[source]¶
Process grep: return information about all processes whose command-line args match the given regex pattern
- session(new_session=False)[source]¶
Creates a new
ShellSessionobject; this invokes/bin/shand executes commands on it over stdin/stdout/stderr- Return type:
- tempdir()[source]¶
A context manager that creates a temporary directory, which is removed when the context exits
- as_user(username=None)[source]¶
Run nested commands as the given user. For example:
head = local["head"] head("-n1", "/dev/sda1") # this will fail... with local.as_user(): head("-n1", "/dev/sda1")
- as_root()[source]¶
A shorthand for
as_user("root")- Return type:
- property python¶
A command that represents the current python interpreter (
sys.executable).
- class plumbum.machines.local.PlumbumLocalPopen(*args, **kwargs)[source]¶
- iter_lines(retcode=0, timeout=None, linesize=-1, line_timeout=None, buffer_size=None, *, mode=None, _iter_lines=<function _iter_lines_posix>)¶
- Overloads:
proc (PopenWithAddons[Any]), retcode (int), timeout (float | None), linesize (int), line_timeout (float | None), buffer_size (int | None), mode (Literal[Mode.BY_POSITION] | None), _iter_lines (Callable[[PopenWithAddons[Any], Callable[[bytes], str], int, float | None], Generator[tuple[int, str], None, None]]) → Generator[tuple[int, str], None, None]
proc (PopenWithAddons[Any]), retcode (int), timeout (float | None), linesize (int), line_timeout (float | None), buffer_size (int | None), mode (Literal[Mode.BY_TYPE]), _iter_lines (Callable[[PopenWithAddons[Any], Callable[[bytes], str], int, float | None], Generator[tuple[int, str], None, None]]) → Generator[tuple[None, str] | tuple[str, None], None, None]
Runs the given process (equivalent to run_proc()) and yields a tuples of (out, err) line pairs. If the exit code of the process does not match the expected one,
ProcessExecutionErroris raised.- Parameters:
retcode (
int) – The expected return code of this process (defaults to 0). In order to disable exit-code validation, passNone. It may also be a tuple (or any iterable) of expected exit codes.timeout (
float|None) – The maximal amount of time (in seconds) to allow the process to run.Nonemeans no timeout is imposed; otherwise, if the process hasn’t terminated after that many seconds, the process will be forcefully terminated an exception will be raisedlinesize (
int) – Maximum number of characters to read from stdout/stderr at each iteration.-1(default) reads until a b’n’ is encountered.line_timeout (
float|None) – The maximal amount of time (in seconds) to allow between consecutive lines in either stream. Raise anProcessLineTimedOutif the timeout has been reached.Nonemeans no timeout is imposed.buffer_size (
int|None) – Maximum number of lines to keep in the stdout/stderr buffers, in case of a ProcessExecutionError. Default isNone, which defaults to DEFAULT_BUFFER_SIZE (which is infinite by default).0will disable buffering completely.mode (
Mode|None) – Controls what the generator yields. Defaults to DEFAULT_ITER_LINES_MODE (which is BY_POSITION by default) - BY_POSITION (default): yields(out, err)line tuples, where either item may beNone- BY_TYPE: yields(fd, line)tuples, wherefdis 1 (stdout) or 2 (stderr)
- Returns:
An iterator of (out, err) line tuples.
- plumbum.machines.local.async_local = <plumbum.machines.local.AsyncLocalMachine object>¶
Async version of the local machine singleton.
Use this to access async commands:
from plumbum import async_local # or from plumbum.machines.local import async_local async def main(): result = await async_local["ls"]("-la") print(result)
Added in version 2.0.
- plumbum.machines.local.local = <plumbum.machines.local.LocalMachine object>¶
The local machine (a singleton object). It serves as an entry point to everything related to the local machine, such as working directory and environment manipulation, command creation, etc.
Attributes:
cwd- the local working directoryenv- the local environmentcustom_encoding- the local machine’s default encoding (sys.getfilesystemencoding())
- exception plumbum.machines.session.HostPublicKeyUnknown(argv, retcode, stdout, stderr, message=None, *, host=None)[source]¶
Raises when the host public key isn’t known
- exception plumbum.machines.session.IncorrectLogin(argv, retcode, stdout, stderr, message=None, *, host=None)[source]¶
Raises when incorrect login credentials are provided
- class plumbum.machines.session.MarkedPipe(pipe, marker)[source]¶
A pipe-like object from which you can read lines; the pipe will return report EOF (the empty string) when a special marker is detected
- exception plumbum.machines.session.SSHCommsChannel2Error(argv, retcode, stdout, stderr, message=None, *, host=None)[source]¶
Raises when channel 2 (stderr) is not available
- exception plumbum.machines.session.SSHCommsError(argv, retcode, stdout, stderr, message=None, *, host=None)[source]¶
Raises when the communication channel can’t be created on the remote host or it times out.
- class plumbum.machines.session.SessionPopen(proc, argv, isatty, stdin, stdout, stderr, encoding, *, host)[source]¶
A shell-session-based
Popen-like object (has the following attributes:stdin,stdout,stderr,returncode)
- class plumbum.machines.session.ShellSession(proc, encoding='auto', isatty=False, connect_timeout=5, *, host=None)[source]¶
An abstraction layer over shell sessions. A shell session is the execution of an interactive shell (
/bin/shor something compatible), over which you may run commands (sent over stdin). The output of is then read from stdout and stderr. Shell sessions are less “robust” than executing a process on its own, and they are susseptible to all sorts of malformatted-strings attacks, and there is little benefit from using them locally. However, they can greatly speed up remote connections, and are required for the implementation ofSshMachine, as they allow us to send multiple commands over a single SSH connection (setting up separate SSH connections incurs a high overhead). Try to avoid using shell sessions, unless you know what you’re doing.Instances of this class may be used as context-managers.
- Parameters:
proc (
PopenWithAddons[Any] |SessionPopen|ParamikoPopen) – The underlying shell process (with open stdin, stdout and stderr)encoding (
str) – The encoding to use for the shell session. If"auto", the underlying process’ encoding is used.isatty (
bool) – If true, assume the shell has a TTY and that stdout and stderr are unifiedconnect_timeout (
float|None) – The timeout to connect to the shell, after which, if no prompt is seen, the shell process is killed
- alive()[source]¶
Returns
Trueif the underlying shell process is alive,Falseotherwise- Return type:
- popen(cmd)[source]¶
Runs the given command in the shell, adding some decoration around it. Only a single command can be executed at any given time.
- Parameters:
cmd (
str|BaseCommand) – The command (string orCommandobject) to run- Return type:
- Returns:
A
SessionPopeninstance
- exception plumbum.machines.session.ShellSessionError[source]¶
Raises when something goes wrong when calling
ShellSession.popen- __weakref__¶
list of weak references to the object
Remote Machines¶
- class plumbum.machines.remote.AsyncRemoteMachine(sync_machine)[source]¶
Async version of BaseRemoteMachine.
This class provides async access to remote commands via SSH. It wraps a sync RemoteMachine and provides async execution methods.
Example:
from plumbum.machines.ssh_machine import AsyncSshMachine async with AsyncSshMachine("host") as rem: ls = rem["ls"] result = await ls("-la")
Added in version 2.0.
- __init__(sync_machine)[source]¶
Initialize with a sync remote machine to wrap.
- Args:
sync_machine: The sync remote machine to wrap
- __getitem__(cmd)[source]¶
Get an async remote command by name or path.
This delegates to the sync machine for command lookup, then wraps it.
- Return type:
- Args:
cmd: Command name (will be looked up in PATH) or RemotePath
- Returns:
AsyncRemoteCommand instance
- Raises:
CommandNotFound: If command is not found in PATH
- property cwd¶
Current working directory on remote machine.
- property env¶
Environment variables on remote machine.
- class plumbum.machines.remote.BaseRemoteMachine(encoding='utf8', connect_timeout=10, new_session=False)[source]¶
Represents a remote machine; serves as an entry point to everything related to that remote machine, such as working directory and environment manipulation, command creation, etc.
Attributes:
cwd- the remote working directoryenv- the remote environmentcustom_encoding- the remote machine’s default encoding (assumed to be UTF8)connect_timeout- the connection timeout
There also is a _cwd attribute that exists if the cwd is not current (del if cwd is changed).
- class RemoteCommand(remote, executable, encoding='auto')¶
- __init__(remote, executable, encoding='auto')¶
- nohup(cwd='.', stdout='nohup.out', stderr=None, append=True)¶
Runs a command detached.
- Return type:
- popen(args=(), **kwargs)¶
Spawns the given command, returning a
Popen-like object.
- clear_program_cache()[source]¶
Clear the program cache, which is populated via
machine.which(progname)calls.This cache speeds up the lookup of a program in the machines PATH, and is particularly effective for RemoteMachines.
- Return type:
- close()[source]¶
closes the connection to the remote machine; all paths and programs will become defunct
- Return type:
- path(*parts)[source]¶
A factory for
RemotePaths. Usage:p = rem.path("/usr", "lib", "python2.7")- Return type:
- which(progname)[source]¶
Looks up a program in the
PATH. If the program is not found, raisesCommandNotFound- Parameters:
progname (
str) – The program’s name. Note that if underscores (_) are present in the name, and the exact name is not found, they will be replaced in turn by hyphens (-) then periods (.), and the name will be looked up again for each alternative- Return type:
- Returns:
- __getitem__(cmd)[source]¶
Returns a Command object representing the given program.
cmdcan be a string or aRemotePath; if it is a path, a command representing this path will be returned; otherwise, the program name will be looked up in the system’sPATH(usingwhich). Usage:r_ls = rem["ls"]
- Return type:
- property python¶
A command that represents the default remote python interpreter
- session(isatty=False, *, new_session=False)[source]¶
Creates a new
ShellSessionobject; this invokes the user’s shell on the remote machine and executes commands on it over stdin/stdout/stderr- Return type:
- download(src, dst)[source]¶
Downloads a remote file/directory (
src) to a local destination (dst).srcmust be a string or aRemotePathpointing to this remote machine, anddstmust be a string or aLocalPath- Return type:
- upload(src, dst)[source]¶
Uploads a local file/directory (
src) to a remote destination (dst).srcmust be a string or aLocalPath, anddstmust be a string or aRemotePathpointing to this remote machine- Return type:
- popen(args, **kwargs)[source]¶
Spawns the given command on the remote machine, returning a
Popen-like object; do not use this method directly, unless you need “low-level” control on the remote process- Return type:
- list_processes()[source]¶
Returns information about all running processes (on POSIX systems: using
ps)Added in version 1.3.
- exception plumbum.machines.remote.ClosedRemoteMachine[source]¶
- __weakref__¶
list of weak references to the object
- class plumbum.machines.remote.RemoteCommand(remote, executable, encoding='auto')[source]¶
- class plumbum.machines.remote.RemoteEnv(remote)[source]¶
The remote machine’s environment; exposes a dict-like interface
- __delitem__(name)[source]¶
Deletes an environment variable from the current environment
- Return type:
- __setitem__(name, value)[source]¶
Sets/replaces an environment variable’s value in the current environment
- Return type:
- expand(expr)[source]¶
Expands any environment variables and home shortcuts found in
expr(likeos.path.expandusercombined withos.path.expandvars)
- class plumbum.machines.ssh_machine.AsyncSshMachine(host, user=None, port=None, keyfile=None, ssh_command=None, scp_command=None, ssh_opts=(), scp_opts=(), password=None, encoding='utf8', connect_timeout=10, new_session=False)[source]¶
Async version of SshMachine.
This class provides async SSH command execution. It wraps a sync SshMachine and provides async execution methods.
Example:
from plumbum.machines.ssh_machine import AsyncSshMachine async with AsyncSshMachine("hostname") as rem: result = await rem["ls"]("-la") # Concurrent execution results = await asyncio.gather( rem["echo"]("task1"), rem["echo"]("task2"), )
Added in version 2.0.
- __init__(host, user=None, port=None, keyfile=None, ssh_command=None, scp_command=None, ssh_opts=(), scp_opts=(), password=None, encoding='utf8', connect_timeout=10, new_session=False)[source]¶
Initialize async SSH machine.
- Args:
host: The host name to connect to (SSH server) user: The user to connect as (if None, the default will be used) port: The server’s port (if None, the default will be used) keyfile: The path to the identity file (if None, the default will be used) ssh_command: The ssh command to use (if None, the default will be used) scp_command: The scp command to use (if None, the default will be used) ssh_opts: Any additional options for ssh (a list of strings) scp_opts: Any additional options for scp (a list of strings) password: The password to use (requires sshpass) encoding: The remote machine’s encoding (defaults to UTF8) connect_timeout: Connection timeout (default 10 seconds) new_session: Whether to start as a new session leader
- property cwd¶
Current working directory on remote machine.
- property env¶
Environment variables on remote machine.
- class plumbum.machines.ssh_machine.PuttyMachine(host, user=None, port=None, keyfile=None, ssh_command=None, scp_command=None, ssh_opts=(), scp_opts=(), encoding='utf8', connect_timeout=10, new_session=False)[source]¶
PuTTY-flavored SSH connection. The programs
plinkandpscpare expected to be in the path (or you may provide your ownssh_commandandscp_command)Arguments are the same as for
plumbum.machines.ssh_machine.SshMachine- __init__(host, user=None, port=None, keyfile=None, ssh_command=None, scp_command=None, ssh_opts=(), scp_opts=(), encoding='utf8', connect_timeout=10, new_session=False)[source]¶
- session(isatty=False, new_session=False)[source]¶
Creates a new
ShellSessionobject; this invokes the user’s shell on the remote machine and executes commands on it over stdin/stdout/stderr- Return type:
- class plumbum.machines.ssh_machine.SshMachine(host, user=None, port=None, keyfile=None, ssh_command=None, scp_command=None, ssh_opts=(), scp_opts=(), password=None, encoding='utf8', connect_timeout=10, new_session=False)[source]¶
An implementation of
remote machineover SSH. Invoking a remote command translates to invoking it over SSHwith SshMachine("yourhostname") as rem: r_ls = rem["ls"] # r_ls is the remote `ls` # executing r_ls() translates to `ssh yourhostname ls`
- Parameters:
host (
str) – the host name to connect to (SSH server)user (
str|None) – the user to connect as (ifNone, the default will be used)port (
int|None) – the server’s port (ifNone, the default will be used)keyfile (
str|None) – the path to the identity file (ifNone, the default will be used)ssh_command (
BaseCommand|None) – thesshcommand to use; this has to be aCommandobject; ifNone, the default ssh client will be used.scp_command (
BaseCommand|None) – thescpcommand to use; this has to be aCommandobject; ifNone, the default scp program will be used.ssh_opts (
Sequence[str]) – any additional options forssh(a list of strings)scp_opts (
Sequence[str]) – any additional options forscp(a list of strings)password (
str|None) – the password to use; requiressshpassbe installed. Cannot be used in conjunction withssh_commandorscp_command(will be ignored). NOTE: THIS IS A SECURITY RISK!encoding (
str) – the remote machine’s encoding (defaults to UTF8)connect_timeout (
float|None) – specify a connection timeout (the time until shell prompt is seen). The default is 10 seconds. Set toNoneto disablenew_session (
bool) – whether or not to start the background session as a new session leader (setsid). This will prevent it from being killed on Ctrl+C (SIGINT)
- __init__(host, user=None, port=None, keyfile=None, ssh_command=None, scp_command=None, ssh_opts=(), scp_opts=(), password=None, encoding='utf8', connect_timeout=10, new_session=False)[source]¶
- popen(args, ssh_opts=(), env=None, cwd=None, **kwargs)[source]¶
Spawns the given command on the remote machine, returning a
Popen-like object; do not use this method directly, unless you need “low-level” control on the remote process- Return type:
- daemonic_popen(command, cwd='.', stdout=None, stderr=None, append=True)[source]¶
Runs the given command using
nohupand redirects std handles, allowing the command to run “detached” from its controlling TTY or parent. Does not return anything.Added in version 1.6.0.
- Return type:
- session(isatty=False, new_session=False)[source]¶
Creates a new
ShellSessionobject; this invokes the user’s shell on the remote machine and executes commands on it over stdin/stdout/stderr- Return type:
- tunnel(lport, dport, lhost='localhost', dhost='localhost', connect_timeout=None, reverse=False)[source]¶
Creates an SSH tunnel from the TCP port (
lport) of the local machine (lhost, defaults to"localhost", but it can be any IP you canbind()) to the remote TCP port (dport) of the destination machine (dhost, defaults to"localhost", which means this remote machine). This function also supports Unix sockets, in which case the local socket should be passed in aslportand the local bind address should beNone. The same can be done for a remote socket, by following the same pattern withdportanddhost. The returnedSshTunnelobject can be used as a context-manager.The more conventional use case is the following:
+---------+ +---------+ | Your | | Remote | | Machine | | Machine | +----o----+ +---- ----+ | ^ | | lport dport | | \______SSH TUNNEL____/ (secure)
Here, you wish to communicate safely between port
lportof your machine and portdportof the remote machine. Communication is tunneled over SSH, so the connection is authenticated and encrypted.The more general case is shown below (where
dport != "localhost"):+---------+ +-------------+ +-------------+ | Your | | Remote | | Destination | | Machine | | Machine | | Machine | +----o----+ +---- ----o---+ +---- --------+ | ^ | ^ | | | | lhost:lport | | dhost:dport | | | | \_____SSH TUNNEL_____/ \_____SOCKET____/ (secure) (not secure)
Usage:
rem = SshMachine("megazord") with rem.tunnel(1234, "/var/lib/mysql/mysql.sock", dhost=None): sock = socket.socket() sock.connect(("localhost", 1234)) # sock is now tunneled to the MySQL socket on megazord
The
connect_timeoutis the time to wait for the tunnel’s shell prompt; if not given, the machine-levelconnect_timeoutis used.- Return type:
- download(src, dst)[source]¶
Downloads a remote file/directory (
src) to a local destination (dst).srcmust be a string or aRemotePathpointing to this remote machine, anddstmust be a string or aLocalPath- Return type:
- upload(src, dst)[source]¶
Uploads a local file/directory (
src) to a remote destination (dst).srcmust be a string or aLocalPath, anddstmust be a string or aRemotePathpointing to this remote machine- Return type:
- class plumbum.machines.ssh_machine.SshTunnel(session, lport, dport, reverse)[source]¶
An object representing an SSH tunnel (created by
SshMachine.tunnel)- property lport¶
Tunneled port or socket on the local machine.
- property dport¶
Tunneled port or socket on the remote machine.
- property reverse¶
Represents if the tunnel is a reverse tunnel.
- class plumbum.machines.paramiko_machine.ParamikoMachine(host, user=None, port=None, password=None, keyfile=None, load_system_host_keys=True, missing_host_policy=None, encoding='utf8', look_for_keys=None, connect_timeout=None, keep_alive=0, gss_auth=False, gss_kex=None, gss_deleg_creds=None, gss_host=None, get_pty=False, load_system_ssh_config=False)[source]¶
An implementation of
remote machineover Paramiko (a Python implementation of openSSH2 client/server). Invoking a remote command translates to invoking it over SSHwith ParamikoMachine("yourhostname") as rem: r_ls = rem["ls"] # r_ls is the remote `ls` # executing r_ls() is equivalent to `ssh yourhostname ls`, only without # spawning a new ssh client
- Parameters:
host (
str) – the host name to connect to (SSH server)user (
str|None) – the user to connect as (ifNone, the default will be used)port (
int|None) – the server’s port (ifNone, the default will be used)password (
str|None) – the user’s password (if a password-based authentication is to be performed) (ifNone, key-based authentication will be used)keyfile (
str|None) – the path to the identity file (ifNone, the default will be used)load_system_host_keys (
bool) – whether or not to load the system’s host keys (from/etc/sshand~/.ssh). The default isTrue, which means Paramiko behaves much like thesshcommand-line clientmissing_host_policy (
Any|None) – the value passed to the underlyingset_missing_host_key_policyof the client. The default isNone, which meansset_missing_host_key_policyis not invoked and paramiko’s default behavior (reject) is employedencoding (
str) – the remote machine’s encoding (defaults to UTF8)look_for_keys (
bool|None) – set to False to disable searching for discoverable private key files in~/.ssh
Note
If Paramiko 1.15 or above is installed, can use GSS_API authentication
- Parameters:
gss_auth (
bool) –Trueif you want to use GSS-API authenticationgss_kex (
bool|None) – Perform GSS-API Key Exchange and user authenticationgss_deleg_creds (
bool|None) – Delegate GSS-API client credentials or notgss_host (
str|None) – The targets name in the kerberos database. default: hostnameget_pty (
bool) – Execute remote commands with allocated pseudo-tty. default: Falseload_system_ssh_config (
bool) – read system SSH config for ProxyCommand configuration. default: False
- class RemoteCommand(remote, executable, encoding='auto')¶
- __init__(host, user=None, port=None, password=None, keyfile=None, load_system_host_keys=True, missing_host_policy=None, encoding='utf8', look_for_keys=None, connect_timeout=None, keep_alive=0, gss_auth=False, gss_kex=None, gss_deleg_creds=None, gss_host=None, get_pty=False, load_system_ssh_config=False)[source]¶
- close()[source]¶
closes the connection to the remote machine; all paths and programs will become defunct
- Return type:
- property sftp¶
Returns an SFTP client on top of the current SSH connection; it can be used to manipulate files directly, much like an interactive FTP/SFTP session
- session(isatty=False, term='vt100', width=80, height=24, *, new_session=False)[source]¶
Creates a new
ShellSessionobject; this invokes the user’s shell on the remote machine and executes commands on it over stdin/stdout/stderr- Return type:
- popen(args, stdin=None, stdout=None, stderr=None, new_session=False, env=None, cwd=None)[source]¶
Spawns the given command on the remote machine, returning a
Popen-like object; do not use this method directly, unless you need “low-level” control on the remote process- Return type:
- download(src, dst)[source]¶
Downloads a remote file/directory (
src) to a local destination (dst).srcmust be a string or aRemotePathpointing to this remote machine, anddstmust be a string or aLocalPath- Return type:
- upload(src, dst)[source]¶
Uploads a local file/directory (
src) to a remote destination (dst).srcmust be a string or aLocalPath, anddstmust be a string or aRemotePathpointing to this remote machine- Return type:
- connect_sock(dport, dhost='localhost', ipv6=False)[source]¶
Returns a Paramiko
Channel, connected to dhost:dport on the remote machine. TheChannelbehaves like a regular socket; you cansendandrecvon it and the data will pass encrypted over SSH. Usage:mach = ParamikoMachine("myhost") sock = mach.connect_sock(12345) data = sock.recv(100) sock.send("foobar") sock.close()
- Return type:
SocketCompatibleChannel