You must log in or register to comment.
I assume you mean “lookup”, as import doesn’t really make much sense.
I’m currently using this with wofi, though I’ll eventually rewrite it as anyrun plugin, which provides a bit more control:
#!/usr/bin/env python3 from argparse import ArgumentParser import subprocess import json import os ssh_config_file = "~/.ssh/config" ssh_known_hosts_file = "~/.ssh/known_hosts" # Returns a list of all hosts def get_hosts(): hosts = [] with open(os.path.expanduser(ssh_config_file)) as f: content = f.readlines() for line in content: line = line.lstrip() # Ignore wildcards if line.startswith('Host ') and not '*' in line: for host in line.split()[1:]: hosts.append(host) # Removes duplicate entries hosts = sorted(set(hosts)) return hosts def get_known_hosts(): hosts = [] with open(os.path.expanduser(ssh_known_hosts_file)) as f: content = f.readlines() for line in content: line = line.lstrip() host_entry = line.partition(" ")[0] hosts.append(host_entry.partition(",")[0]) # Removes duplicate entries hosts = sorted(set(hosts)) return hosts # Returns a newline seperated UFT-8 encoded string of all ssh hosts def parse_hosts(hosts): return "\n".join(hosts).encode("UTF-8") # Executes wofi with the given input string def show_wofi(command, hosts): process = subprocess.Popen(command,shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE) ret = process.communicate(input=hosts) host, rest = ret return host # Switches the focus to the given id def ssh_to_host(host, terminal, ssh_command): if "]:" in host: host, port = host[1:].split("]:") command = "{terminal} \'{ssh_command} {host} -p {port}\'".format(terminal=terminal, ssh_command=ssh_command, host=host, port=port) else: command = "{terminal} \'{ssh_command} {host}\'".format(terminal=terminal, ssh_command=ssh_command, host=host) process = subprocess.Popen(command,shell=True) # Entry point if __name__ == "__main__": parser = ArgumentParser(description="Wofi based ssh launcher") parser.add_argument("terminal", help='Terminal command to use') parser.add_argument("--ssh-command", dest='ssh_command', default='ssh', help='ssh command to use (default=ssh)') parser.add_argument("--mode", dest='mode', default='known_hosts', help='where to read from (default=known_hosts)') parser.add_argument("--command", default='wofi -p \"SSH hosts: \" -d -i --hide-scroll', help='launcher command to use') args = parser.parse_args() if (args.mode == "config"): hosts = get_hosts() elif (args.mode == "known_hosts"): hosts = get_known_hosts() parsed_hosts = parse_hosts(hosts) selected = show_wofi(args.command, parsed_hosts) selected_host = selected.decode('utf-8').rstrip() if selected_host != "": ssh_to_host(selected_host, args.terminal, args.ssh_command)