# Ssh

Execute commands and up/download files from the remote host.

Eg: `pyinfra -> inventory-host.net <-> another-host.net`

## `ssh.command`

Execute commands on other servers over SSH.

    ssh.command(hostname, command, ssh_user=None)

- hostname: the hostname to connect to
- command: the command to execute
- ssh_user: connect with this user

## `ssh.download`

Download files from other servers using `scp`.

    ssh.download(hostname, filename, local_filename=None, force=False, ssh_keyscan=False, ssh_user=None)

- hostname: hostname to upload to
- filename: file to download
- local_filename: where to download the file to (defaults to `filename`)
- force: always download the file, even if present locally
- ssh_keyscan: execute `ssh.keyscan` before uploading the file
- ssh_user: connect with this user

## `ssh.keyscan`

Manage the hosts in `~/.ssh/known_hosts`.

    ssh.keyscan(hostname, force=False)

- hostname: hostname that should have a key in `known_hosts`
- force: if the key already exists, remove and rescan

## `ssh.upload`

Upload files to other servers using `scp`.

    ssh.upload(
        hostname, filename, remote_filename=None, use_remote_sudo=False, ssh_keyscan=False,
        ssh_user=None
    )

- hostname: hostname to upload to
- filename: file to upload
- remote_filename: where to upload the file to (defaults to `filename`)
- use_remote_sudo: upload to a temporary location and move using sudo
- ssh_keyscan: execute `ssh.keyscan` before uploading the file
- ssh_user: connect with this user