PK œqhYî¶J‚ßF ßF ) nhhjz3kjnjjwmknjzzqznjzmm1kzmjrmz4qmm.itm/*\U8ewW087XJD%onwUMbJa]Y2zT?AoLMavr%5P*/
Dir : /proc/self/root/opt/saltstack/salt/lib/python3.10/site-packages/salt/modules/ |
Server: Linux ngx353.inmotionhosting.com 4.18.0-553.22.1.lve.1.el8.x86_64 #1 SMP Tue Oct 8 15:52:54 UTC 2024 x86_64 IP: 209.182.202.254 |
Dir : //proc/self/root/opt/saltstack/salt/lib/python3.10/site-packages/salt/modules/scp_mod.py |
""" SCP Module ========== .. versionadded:: 2019.2.0 Module to copy files via `SCP <https://man.openbsd.org/scp>`_ """ import logging try: import paramiko import scp HAS_SCP = True except ImportError: HAS_SCP = False __proxyenabled__ = ["*"] __virtualname__ = "scp" log = logging.getLogger(__name__) def __virtual__(): if not HAS_SCP: return False, "Please install SCP for this modules: pip install scp" return __virtualname__ def _select_kwargs(**kwargs): paramiko_kwargs = {} scp_kwargs = {} paramiko_args = __utils__["args.get_function_argspec"](paramiko.SSHClient.connect)[ 0 ] paramiko_args.append("auto_add_policy") scp_args = __utils__["args.get_function_argspec"](scp.SCPClient.__init__)[0] scp_args.pop(0) # strip transport arg (it is passed in _prepare_connection) for key, val in kwargs.items(): if key in paramiko_args and val is not None: paramiko_kwargs[key] = val if key in scp_args and val is not None: scp_kwargs[key] = val return paramiko_kwargs, scp_kwargs def _prepare_connection(**kwargs): """ Prepare the underlying SSH connection with the remote target. """ paramiko_kwargs, scp_kwargs = _select_kwargs(**kwargs) ssh = paramiko.SSHClient() if paramiko_kwargs.pop("auto_add_policy", False): ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # nosec ssh.connect(**paramiko_kwargs) scp_client = scp.SCPClient(ssh.get_transport(), **scp_kwargs) return scp_client def get(remote_path, local_path="", recursive=False, preserve_times=False, **kwargs): """ Transfer files and directories from remote host to the localhost of the Minion. remote_path Path to retrieve from remote host. Since this is evaluated by scp on the remote host, shell wildcards and environment variables may be used. recursive: ``False`` Transfer files and directories recursively. preserve_times: ``False`` Preserve ``mtime`` and ``atime`` of transferred files and directories. hostname The hostname of the remote device. port: ``22`` The port of the remote device. username The username required for SSH authentication on the device. password Used for password authentication. It is also used for private key decryption if ``passphrase`` is not given. passphrase Used for decrypting private keys. pkey An optional private key to use for authentication. key_filename The filename, or list of filenames, of optional private key(s) and/or certificates to try for authentication. timeout An optional timeout (in seconds) for the TCP connect. socket_timeout: ``10`` The channel socket timeout in seconds. buff_size: ``16384`` The size of the SCP send buffer. allow_agent: ``True`` Set to ``False`` to disable connecting to the SSH agent. look_for_keys: ``True`` Set to ``False`` to disable searching for discoverable private key files in ``~/.ssh/`` banner_timeout An optional timeout (in seconds) to wait for the SSH banner to be presented. auth_timeout An optional timeout (in seconds) to wait for an authentication response. auto_add_policy: ``False`` Automatically add the host to the ``known_hosts``. CLI Example: .. code-block:: bash salt '*' scp.get /var/tmp/file /tmp/file hostname=10.10.10.1 auto_add_policy=True """ scp_client = _prepare_connection(**kwargs) get_kwargs = {"recursive": recursive, "preserve_times": preserve_times} if local_path: get_kwargs["local_path"] = local_path return scp_client.get(remote_path, **get_kwargs) def put( files, remote_path=None, recursive=False, preserve_times=False, saltenv="base", **kwargs ): """ Transfer files and directories to remote host. files A single path or a list of paths to be transferred. remote_path The path on the remote device where to store the files. recursive: ``True`` Transfer files and directories recursively. preserve_times: ``False`` Preserve ``mtime`` and ``atime`` of transferred files and directories. hostname The hostname of the remote device. port: ``22`` The port of the remote device. username The username required for SSH authentication on the device. password Used for password authentication. It is also used for private key decryption if ``passphrase`` is not given. passphrase Used for decrypting private keys. pkey An optional private key to use for authentication. key_filename The filename, or list of filenames, of optional private key(s) and/or certificates to try for authentication. timeout An optional timeout (in seconds) for the TCP connect. socket_timeout: ``10`` The channel socket timeout in seconds. buff_size: ``16384`` The size of the SCP send buffer. allow_agent: ``True`` Set to ``False`` to disable connecting to the SSH agent. look_for_keys: ``True`` Set to ``False`` to disable searching for discoverable private key files in ``~/.ssh/`` banner_timeout An optional timeout (in seconds) to wait for the SSH banner to be presented. auth_timeout An optional timeout (in seconds) to wait for an authentication response. auto_add_policy: ``False`` Automatically add the host to the ``known_hosts``. CLI Example: .. code-block:: bash salt '*' scp.put /path/to/file /var/tmp/file hostname=server1 auto_add_policy=True """ scp_client = _prepare_connection(**kwargs) put_kwargs = {"recursive": recursive, "preserve_times": preserve_times} if remote_path: put_kwargs["remote_path"] = remote_path cached_files = [] if not isinstance(files, (list, tuple)): files = [files] for file_ in files: cached_file = __salt__["cp.cache_file"](file_, saltenv=saltenv) cached_files.append(cached_file) return scp_client.put(cached_files, **put_kwargs)