Reading text from Putty window - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: Reading text from Putty window (/thread-20068.html) |
Reading text from Putty window - Nil - Jul-25-2019 Hi all, Im new to Python (3.7) I'm Trying to automate Putty for SSH/Telnet/Serial connection it more comfortable to do it through Putty because the connection type changes. i want it to read the output from putty, so if it asks for "username" it will "answer" correctly. this is my script: from pywinauto.application import Application from pynput.keyboard import Key, Controller print('Configuring') app = Application().start(cmd_line=u'"C:\\...putty.exe" ') puttyconfigbox = app.PuTTYConfigBox puttyconfigbox.wait('ready') listbox = puttyconfigbox.ListBox listbox.select(u'COM5') button = puttyconfigbox[u'&Load'] button.click() button2 = puttyconfigbox[u'&Open'] button2.click() keyboard = Controller() keyboard.press(Key.enter) keyboard.type('batm') keyboard.press(Key.enter) keyboard.type('enable\nconf t\n')how can i do it? Thanks in advance RE: Reading text from Putty window - fishhook - Jul-26-2019 There are many ways to get ssh connection via console in Windows. Eventually you can use bash in sygwin or WSL. It seems you chose the most difficult way to automate your routine. RE: Reading text from Putty window - Nil - Jul-26-2019 I didn't succeed in other way.. telnetlib and such didn't react with the device. anyone has an idea how to read from a terminal window? RE: Reading text from Putty window - ndc85430 - Jul-26-2019 Have you considered using Expect for this, rather than building your own thing? RE: Reading text from Putty window - DeaD_EyE - Jul-26-2019 I guess you want to automate tasks. You should use Libraries, which gives you direct access to SSH. Putty is not the solution for it. I made a little example with Paramiko. This library works on Windows and *nix. import sys import getpass from pathlib import Path from argparse import ArgumentParser from paramiko.client import ( SSHClient, MissingHostKeyPolicy, ) from paramiko.ssh_exception import AuthenticationException def ask_password(): return getpass.getpass('Please enter password: ') def connect( hostname, username=None, password=None, port=22, key=False, **kwargs, ): client = SSHClient() client.set_missing_host_key_policy(MissingHostKeyPolicy) if key: # use only private keys for login, # if it was explicit requested client.load_system_host_keys() client.connect(hostname, port=port, username=username, password=password) return client def command_executor(client, script): with script.open() as fd: for line in fd: print(f'Executing command: {line.rstrip()}') stdin, stdout, stderr = client.exec_command(line) stdout, stderr = stdout.read().decode(), stderr.read().decode() print(stdout, end='') def main(**kwargs): if not kwargs['key']: kwargs['password'] = ask_password() client = connect(**kwargs) command_executor(client, kwargs['script']) client.close() if __name__ == '__main__': parser = ArgumentParser() parser.add_argument('hostname', help='Hostname of the host you want to connect') parser.add_argument('username', type=str, help='User for login') parser.add_argument('script', type=Path, help='Path to script file, which should executed') parser.add_argument('--port', type=int, default=22, help='Port of SSH service') parser.add_argument('--key', action='store_true', help='Use only private key for login') args = parser.parse_args() if not args.script.exists(): print(f'The script {args.script} does not exist') sys.exit(1) try: main(**vars(args)) except AuthenticationException: print('Problem with authentication', file=sys.stderr) sys.exit(2)Hint: Storing passwords in source code is not a good idea. If you want to store your password, then do it in a file and read the file in the script to get the password. Better is, if you crate a public/private key pair and put the public key in .ssh/authorized_hosts You should protect the private key with a passphrase and the passphrase can be stored in a file. RE: Reading text from Putty window - HritikaMehta - Jul-23-2020 Can we use Paramiko for Telnet Connection also? If not then how can we achieve this? I tried through Telnet lib but it gives error after connection and is not able to read from the main screen in putty. Error: " Unable to use your terminal.Check your PROTERMCAP'file(443)Could not find terminal type unknown" |