Naga Suresh.Thota
Naga Suresh.Thota

Reputation: 45

connect to a remote system with a subprocess call without entering a password

I am trying to access a remote machine to execute remote a Python script (remote_test.py).

I changed the SSH configuration so that if I enter ssh user@ip from host terminal it connects to remote system without asking for password.

When I run a Python script on the host machine to execute remote_test.py by using SSH in a subprocess call like this:

P = subprocess.Popen(
    [
        "ssh",
        "user@some_ip",
        "sudo",
        "python",
        "/home/path/remote_test.py",
    ],
    shell=False,
    stdout=subprocess.PIPE
)

It requires me to enter a password.

How can I access the remote machine without needing to enter a password?

Environment:

Upvotes: 0

Views: 1780

Answers (1)

John Zwinck
John Zwinck

Reputation: 249153

You should not use Popen to run the program ssh, but rather use a library like the excellent paramiko to run ssh commands. It has a documented API for connecting using public keys, which is discussed here: How to ssh connect through python Paramiko with public key

Then you'll be able to do something like this:

import paramiko
ssh = paramiko.SSHClient()

ssh.connect('some_ip', username='user', key_filename='keyfile')

stdin, stdout, stderr = ssh.exec_command('sudo python /home/path/remote_test.py')

Upvotes: 1

Related Questions