SSH Connection with Python 3.0

后端 未结 6 1311
余生分开走
余生分开走 2020-12-03 18:53

How can I make an SSH connection in Python 3.0? I want to save a file on a remote computer where I have password-less SSH set up.

相关标签:
6条回答
  • 2020-12-03 19:00

    I recommend calling ssh as a subprocess. It's reliable and portable.

    import subprocess
    proc = subprocess.Popen(['ssh', 'user@host', 'cat > %s' % filename],
                            stdin=subprocess.PIPE)
    proc.communicate(file_contents)
    if proc.retcode != 0:
        ...
    

    You'd have to worry about quoting the destination filename. If you want more flexibility, you could even do this:

    import subprocess
    import tarfile
    import io
    tardata = io.BytesIO()
    tar = tarfile.open(mode='w:gz', fileobj=tardata)
    ... put stuff in tar ...
    proc = subprocess.Popen(['ssh', 'user@host', 'tar xz'],
                            stdin=subprocess.PIPE)
    proc.communicate(tardata.getvalue())
    if proc.retcode != 0:
        ...
    
    0 讨论(0)
  • 2020-12-03 19:04

    First:

    Two steps to login via ssh without password

    in your terminal

    [macm@macm ~]$  ssh-keygen
    [macm@macm ~]$  ssh-copy-id -i $HOME/.ssh/id_rsa.pub root@192.168.1.XX <== change
    

    Now with python

    from subprocess import PIPE, Popen
    
    cmd = 'uname -a'
    stream = Popen(['ssh', 'root@192.168.1.XX', cmd],
                        stdin=PIPE, stdout=PIPE)
    
    rsp = stream.stdout.read().decode('utf-8')
    print(rsp)
    
    0 讨论(0)
  • 2020-12-03 19:06

    I have written Python bindings for libssh2, that run on Python 2.4, 2.5, 2.6, 2.7 and 3.

    0 讨论(0)
  • 2020-12-03 19:08

    You want all of the ssh-functionality implemented as a python library? Have a look at paramiko, although I think it's not ported to Python 3.0 (yet?).

    If you can use an existing ssh installation you can use the subprocess way Dietrich described, or (another way) you could also use pexpect (website here).

    0 讨论(0)
  • 2020-12-03 19:17

    It might take a little work because "twisted:conch" does not appear to have a 3.0 variant.

    0 讨论(0)
  • 2020-12-03 19:18

    libssh2 works great for Python 3.x.
    See this Stack Overflow article How to send a file using scp using python 3.2?

    0 讨论(0)
提交回复
热议问题