标签: paramiko

使用Paramiko一次创建多个SSH连接

下面的代码通过SSH在一台机器上运行grep并打印结果:

import sys, os, string
import paramiko

cmd = "grep -h 'king' /opt/data/horror_20100810*"

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('10.10.3.10', username='xy', password='xy')
stdin, stdout, stderr = ssh.exec_command(cmd)
stdin.write('xy\n')
stdin.flush()

print stdout.readlines()
Run Code Online (Sandbox Code Playgroud)

我怎样才能同时打磨五台机器(这样我没有大的延迟),而不是将所有这些都放在五个变量中并将它们全部打印出来.

python ssh paramiko

18
推荐指数
1
解决办法
3万
查看次数

当pysftp连接失败时,“‘Connection’对象没有属性‘_sftp_live’”

我想很好地捕获“找不到主机 *** 的主机密钥”时的错误,并向最终用户提供适当的消息。我试过这个:

import pysftp, paramiko
try: 
    with pysftp.Connection('1.2.3.4', username='root', password='') as sftp:
        sftp.listdir()
except paramiko.ssh_exception.SSHException as e:
    print('SSH error, you need to add the public key of your remote in your local known_hosts file first.', e)
Run Code Online (Sandbox Code Playgroud)

但不幸的是输出不是很好:

SSH error, you need to add the public key of your remote in your local known_hosts file first. No hostkey for host 1.2.3.4 found.
Exception ignored in: <function Connection.__del__ at 0x00000000036B6D38>
Traceback (most recent call last):
  File "C:\Python37\lib\site-packages\pysftp\__init__.py", line 1013, …
Run Code Online (Sandbox Code Playgroud)

python sftp exception paramiko pysftp

18
推荐指数
3
解决办法
3万
查看次数

从paramiko ssh exec_command连续获取输出

我正在使用paramiko在远程机器上通过ssh执行长时间运行的python脚本.工作就像一个魅力,到目前为止没有问题.

不幸的是,stdout(分别是stderr)只在脚本完成后显示!但是,由于执行时间的原因,我更倾向于在打印时输出每个新行,而不是之后.

remote = paramiko.SSHClient()
remote.set_missing_host_key_policy(paramiko.AutoAddPolicy())
remote.connect("host", username="uname", password="pwd")

# myScript produces continuous output, that I want to capture as it appears    
stdin, stdout, stderr = remote.exec_command("python myScript.py")
stdin.close()
for line in stdout.read().splitlines():
    print(line)
Run Code Online (Sandbox Code Playgroud)

怎么能实现这一目标? 注意:当然可以通过另一个ssh会话将输出传输到文件并"减少"此文件,但这非常难看,我需要一个更清洁,理想的pythonic解决方案:)

python ssh interactive stdout paramiko

17
推荐指数
4
解决办法
4万
查看次数

python paramiko ssh

我是python的新手.我写了一个脚本来连接到主机并执行一个命令

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(host, username=user, password=pw)

print 'running remote command'

stdin, stdout, stderr = ssh.exec_command(command)
stdin.close()

for line in stdout.read().splitlines():
    print '%s$: %s' % (host, line)
    if outfile != None:
        f_outfile.write("%s\n" %line)

for line in stderr.read().splitlines():
    print '%s$: %s' % (host, line + "\n")
    if outfile != None:
        f_outfile.write("%s\n" %line)

ssh.close()

if outfile != None:
    f_outfile.close()

print 'connection to %s closed' %host

except:
   e = sys.exc_info()[1]
   print '%s' %e
Run Code Online (Sandbox Code Playgroud)

当远程命令不需要tty时工作正常.我找到了一个与Paramiko 一起使用的invoke_shell示例嵌套SSH会话.我对这个解决方案不满意,因为如果服务器有一个未在我的脚本中指定的提示 - >无限循环或脚本中的指定提示是返回文本中的字符串 - >不会收到所有数据.是否有更好的解决方案,也许stdout和stderr像我的脚本一样发回?

python ssh paramiko

16
推荐指数
2
解决办法
11万
查看次数

在Python中的远程机器上执行命令

我在Ubuntu上用python编写程序,ls -l在RaspberryPi上执行命令,与Network连接.

任何人都可以指导我如何做到这一点?

python terminal ubuntu tkinter paramiko

16
推荐指数
2
解决办法
5万
查看次数

Paramiko:"FutureWarning:CTR模式需要计数器参数"

我试图在Python2中使用Paramiko通过私有SSH密钥通过SFTP传输文件,但它显示此警告:

/usr/lib/python2.7/dist-packages/Crypto/Cipher/blockalgo.py:141: 
FutureWarning: CTR mode needs counter parameter, not IV   self._cipher = factory.new(key, *args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

实际上它将文件发送到服务器,但有人可以解释一下这个警告意味着什么吗?

这是我的代码:

t = paramiko.Transport((host, port))
key = paramiko.RSAKey.from_private_key_file("/path/to/key.ssh") 
t.connect(username="username",password=None, pkey=key)

sftp = paramiko.SFTPClient.from_transport(t)
sftp.put(source, destination)

sftp.close()
t.close()
Run Code Online (Sandbox Code Playgroud)

python sftp warnings paramiko python-cryptography

16
推荐指数
1
解决办法
2万
查看次数

paramiko SSH exec_command(shell脚本)在完成之前返回

我使用paramiko从远程Linux机器启动shell脚本.启动shell脚本并执行命令make -j8.但是exec_command在make完成之前返回.

如果我在本地计算机上启动脚本,它会正确执行.

有人能解释一下这种行为吗?

python paramiko

15
推荐指数
1
解决办法
1万
查看次数

x11使用paramiko转发

我正在尝试运行一个命令paramiko,应该能够打开一个X窗口.我正在使用的脚本如下:

import paramiko                                    

ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect('192.168.122.55', username='user', password='password')
transport = ssh_client.get_transport()
session = transport.open_session()

session.request_x11()
stdin = session.makefile('wb')
stdout = session.makefile('rb')
stderr = session.makefile_stderr('rb')
session.exec_command('env; xterm')
transport.accept()

print 'Exit status:', session.recv_exit_status()
print 'stdout:\n{}'.format(stdout.read())
print 'stderr:\n{}'.format(stderr.read())
session.close()
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我运行上面的脚本时,我得到了这个输出:

Exit status: 1
stdout:
SHELL=/bin/bash
XDG_SESSION_COOKIE=8025e1ba5e6c47be0d2f3ad6504a25ee-1347286654.617967-1932974971
SSH_CLIENT=192.168.122.1 58654 22
USER=user
MAIL=/var/mail/user
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
PWD=/home/user
LANG=en_US.UTF-8
SHLVL=1
HOME=/home/user
LOGNAME=user
SSH_CONNECTION=192.168.122.1 58654 192.168.122.55 22
DISPLAY=localhost:10.0
_=/usr/bin/env

stderr:  
xterm: Xt error: Can't open display: localhost:10.0
Run Code Online (Sandbox Code Playgroud)

如果我在终端中运行以下命令:

ssh -X user@192.168.122.55 'env; xterm'
Run Code Online (Sandbox Code Playgroud)

然后我得到相同的环境变量(虽然有些端口发生了变化),所以我说我的环境是正确的.但是,我仍然缺少一些可以paramiko …

python x11 paramiko x11-forwarding

15
推荐指数
2
解决办法
5806
查看次数

使用Paramiko在Python上用ssh实现交互式shell?

我想编写一个程序(在Windows 7上的Python 3.x中),它通过ssh在远程shell上执行多个命令.在查看了paramikos的exec_command()函数之后,我意识到它不适合我的用例(因为在执行命令后通道被关闭),因为命令依赖于环境变量(由先前的命令设置)而不能连接到一个exec_command()调用,因为它们将在程序中的不同时间执行.

因此,我想在同一个通道中执行命令.我研究的下一个选项是使用paramikos的invoke_shell()函数实现交互式shell:

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(host, username=user, password=psw, port=22)

channel = ssh.invoke_shell()

out = channel.recv(9999)

channel.send('cd mivne_final\n')
channel.send('ls\n')

while not channel.recv_ready():
    time.sleep(3)

out = channel.recv(9999)
print(out.decode("ascii"))

channel.send('cd ..\n')
channel.send('cd or_fail\n')
channel.send('ls\n')

while not channel.recv_ready():
    time.sleep(3)

out = channel.recv(9999)
print(out.decode("ascii"))

channel.send('cd ..\n')
channel.send('cd simulator\n')
channel.send('ls\n')

while not channel.recv_ready():
    time.sleep(3)

out = channel.recv(9999)
print(out.decode("ascii"))

ssh.close() 
Run Code Online (Sandbox Code Playgroud)

这段代码存在一些问题:

  1. 第一个'print'并不总是打印'ls'输出(有时它只打印在第二个'print'上).
  2. 第一个'cd'和'ls'命令总是出现在输出中(我通过'recv'命令获取它们,作为输出的一部分),而有时会打印以下所有'cd'和'ls'命令,有时它们不是.
  3. 第二个和第三个'cd'和'ls'命令(打印时)总是出现在第一个'ls'输出之前.

我对这种"非决定论"感到困惑,非常感谢你的帮助.

python ssh shell interactive paramiko

15
推荐指数
1
解决办法
3万
查看次数

pyinstaller更新程序与github/bitbucket私人回购

我正在尝试将pyinstaller与私有仓库的更新功能集成.我的问题是,有没有办法将pyupdater与免费替代品集成,例如:bitbucket私有回购?Pyupdater倾向于为公共回购工作,但我无法锻炼如何为私人回购实现这一目标.

配置文件:

class ClientConfig(object):
    PUBLIC_KEY = 'None'
    APP_NAME = 'dad123'
    COMPANY_NAME = 'dad123'
    UPDATE_URLS = ['ssh://git@bitbucket.org/Tysondogerz/ssh/download']
    MAX_DOWNLOAD_RETRIES = 3
Run Code Online (Sandbox Code Playgroud)

创建一个ssh很简单:

ssh-keygen -t rsa -C"youremail@example.com"

所以…

Main.py

#!/usr/bin/env python3
from __future__ import print_function
import time
import argparse
import os
import signal
import sys
import logging
from selenium import webdriver

logging.basicConfig(level=logging.DEBUG)

from client_config import ClientConfig
from pyupdater.client import Client, AppUpdate, LibUpdate

Ssh_key  = DWDJKWNADKJWANDJKWANDWJKDNAWJKDNWAKDNWAJDKWANDJKWANDWAJKDNWAKJDWNADKJWANDWAJKDNAWJKDNWAJKDNWAJKDWNADJKWANDJKWANDKJWADNWAJKDNWAJKNWQWQDWQNDJKQWNDJKWQNDWQJKDNWQJKDNWKJDNWKJANDWJKNDWJKNDWDUWDNWDHDUIWHDIUWHDUIWHDUIWHDIUWHDUIWHDWUDHWUIHDWUDHUhottyouremail@example.com

    client = Client(ClientConfig(), ssh={'ssh_key'})

    from pyupdater.client import Client
from client_config import ClientConfig


def print_status_info(info):
    total = info.get(u'total')
    downloaded …
Run Code Online (Sandbox Code Playgroud)

python git ssh bitbucket paramiko

15
推荐指数
1
解决办法
729
查看次数