You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
1.2 KiB
37 lines
1.2 KiB
import paramiko
|
|
import os
|
|
from subprocess import list2cmdline
|
|
|
|
|
|
def connection_from_config(name):
|
|
"""Create a connection from a Host entry in the .ssh/config file"""
|
|
config = paramiko.config.SSHConfig()
|
|
cp = os.path.expanduser("~/.ssh/config")
|
|
with open(cp) as file:
|
|
config.parse(file)
|
|
info = config.lookup(name)
|
|
info["username"] = info.pop("user")
|
|
info["key_filename"] = info.pop("identityfile")
|
|
info["port"] = int(info["port"])
|
|
client = paramiko.client.SSHClient()
|
|
client.load_host_keys(os.path.expanduser("~/.ssh/known_hosts"))
|
|
client.connect(**info)
|
|
return client
|
|
|
|
|
|
def scp_put(connection: paramiko.sftp_client.SFTPClient, src, dst):
|
|
"""Function to copy files from src to dst using connection (local to remote)"""
|
|
connection.put(src, dst)
|
|
|
|
|
|
def scp_get(connection: paramiko.sftp_client.SFTPClient, src, dst):
|
|
"""Function to copy files from src to dst using connection (remote to local)"""
|
|
connection.get(src, dst)
|
|
|
|
|
|
def exec_remote(connection: paramiko.SSHClient, command):
|
|
"""Function to execute specified command on conection"""
|
|
if not isinstance(command, str):
|
|
command = list2cmdline(command)
|
|
stdin, stdout, stderr = connection.exec_command(command)
|
|
return stdout, stderr
|