标签: paramiko

提示输入密码时出现结构任务错误

我遇到了一个似乎无法克服的错误。我有一个简单的结构任务,必须以远程系统上的不同用户身份运行,例如:

def update():
    env.user = 'otheruser'
    #~ env.password = 'otherpass'  # this works, but I don't want it here.
    with cd(env.sitefolder):
        run('hg pull -u')
Run Code Online (Sandbox Code Playgroud)

如果我使用 env.password 硬编码来运行它,它就可以工作。如果我使用fab -p otherpass update它也有效。如果我省略它,文档说我会收到提示。这是事实,但行不通。每次输入密码后我都会收到此错误:

> fab dev update
[darkstar] Executing task 'update'
[darkstar] run: hg pull -u
[darkstar] Login password: 
ERROR:paramiko.transport:Exception: Error reading SSH protocol banner
...
Fatal error: Error reading SSH protocol banner

Aborting.
Run Code Online (Sandbox Code Playgroud)

在 Ubuntu Natty 上使用 Fabric 1.2.2。我还尝试了 env.no_keys 选项,但它没有改变任何东西。有人可以帮忙吗?

python paramiko fabric

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

Paramiko 问题 - 执行命令时通道关闭

我一直在尝试使用 paramiko 在Overture Box上运行命令来建立 SSH 连接。

我的脚本确实正确连接到盒子,没有看到任何问题,当脚本运行 exec_command(cmd) 方法时出现问题:

Traceback (most recent call last):
  File "test.py", line 39, in <module>
    stdin, stdout, stderr = ssh.exec_command("version")
  File "/opt/csw/lib/python2.7/site-packages/paramiko/client.py", line 345, in exec_command
    chan.exec_command(command)
  File "/opt/csw/lib/python2.7/site-packages/paramiko/channel.py", line 60, in _check
    return func(self, *args, **kwds)
  File "/opt/csw/lib/python2.7/site-packages/paramiko/channel.py", line 229, in exec_command
    self._wait_for_event()
  File "/opt/csw/lib/python2.7/site-packages/paramiko/channel.py", line 1086, in _wait_for_event
    raise e
paramiko.ssh_exception.SSHException: Channel closed.
Run Code Online (Sandbox Code Playgroud)

使用 Linux Box 作为目标主机的相同脚本会产生正确的结果

代码是借用的,我刚刚在谷歌上找到了片段:

import sys
import time
import select
import paramiko

host = raw_input("Hostname?: ")
i …
Run Code Online (Sandbox Code Playgroud)

python paramiko

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

Paramiko 上传文件成功但文件为空

尝试使用 StringIO 将数据帧导出到 csv 并使用 paramiko 通过 SFTP 传输它。文件成功通过,但它是空的。知道为什么吗?

import pandas as pd
from StringIO import StringIO
import paramiko

names = ['Bob','Jessica','Mary','John','Mel']
births = [968, 155, 77, 578, 973]

BabyDataSet = list(zip(names,births))
df = pd.DataFrame(data = BabyDataSet, columns=['Names', 'Births'])

buf = StringIO()
df.to_csv(buf, sep = ',', header = True, index = False)
#buf.getvalue() # Correct output

transport = paramiko.Transport(('localhost', 22))
transport.connect(username='user', password='pass')
sftp = paramiko.SFTPClient.from_transport(transport)

upload_path = '/Users/user/Desktop/test.csv'
sftp.putfo(buf, upload_path)
sftp.close()
Run Code Online (Sandbox Code Playgroud)

python sftp paramiko pandas

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

paramiko 导入错误:DLL 加载失败:操作系统无法运行 %1

我下载了 Anaconda 用于 Windows 上的 python 用法。我正在使用 paramiko 模块进行 SSH。当我尝试使用 paramiko 进行 SSH 连接时,出现以下错误,

Traceback (most recent call last):
File "C:\Users\Anaconda2\lib\site-packages\paramiko\transport.py", line 545, in start_client
raise e
ImportError: DLL load failed: The operating system cannot run %1.
Run Code Online (Sandbox Code Playgroud)

我尝试将“C:\Users\*****\Anaconda2\Library\bin”路径设置为环境变量。但在里面没有用。仍然错误不断。

代码片段:

import paramiko
sftpSession = None
sshSession = paramiko.SSHClient()
sshSession.set_missing_host_key_policy(paramiko.AutoAddPolicy())
sshSession.connect(hostname=hostname,username=username,password=password,timeout=2)
Run Code Online (Sandbox Code Playgroud)

python paramiko anaconda

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

通过 Paramiko SFTP 上传文件不起作用

我正在使用以下 Python 代码使用 Paramiko 通过 SFTP 上传文件。连接“似乎”很好,代码执行到最后,只是当我签入 FileZilla 时文件没有到达目的地。

我已经检查并将文件的权限设置为 777(只是为了确定)。我还在一个单独的终端中检查了我的文件路径字符串,路径是有效的。

import paramiko
.
.

transport = paramiko.Transport((host, port))
transport.connect(username = username, password = password)
sftp = paramiko.SFTPClient.from_transport(transport)

sftp.put(filePath, "/")  # Upload file to root FTP folder
sftp.close()
transport.close()
Run Code Online (Sandbox Code Playgroud)

我能做些什么来调试这个?我可以打印出什么,检查连接是否成功等?

python sftp paramiko

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

如何通过Paramiko获取目录中所有SFTP文件的大小

import paramiko
from socket import error as socket_error
import os 
server =['10.10.0.1','10.10.0.2']
path='/home/test/'
for hostname in server:
    try:
        ssh_remote =paramiko.SSHClient()
        ssh_remote.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        privatekeyfile = os.path.expanduser('~/.ssh/id')
        mykey = paramiko.RSAKey.from_private_key_file(privatekeyfile, password='test123')
        ssh_remote.connect(hostname, username = 'test1', pkey = mykey)
        sftp=ssh_remote.open_sftp()
        for i in sftp.listdir(path):
            info = sftp.stat(i)
            print info.st_size      
    except paramiko.SSHException as sshException:
        print "Unable to establish SSH connection:{0}".format(hostname)
    except socket_error as socket_err:
        print "Unable to connect connection refused"
Run Code Online (Sandbox Code Playgroud)

这是我的代码。我试图获取远程服务器文件的文件大小。但是下面的错误正在抛出。可以请一些指导吗?

错误

import paramiko
from socket import error as socket_error
import os 
server =['10.10.0.1','10.10.0.2']
path='/home/test/' …
Run Code Online (Sandbox Code Playgroud)

python sftp filesize paramiko

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

使用 Python 在 SSH 中使用“su -l”执行命令

我使用的朋友服务器只允许一个用户从 SSH 登录,所以通常我只是以该用户身份登录,然后su -l myuser更改帐户。我想使用 Python 自动化一些无聊的东西,但我遇到了问题。显然,我首先尝试的 Paramiko 模块为每个命令调用一个 shell,所以这是不可能的。后来我尝试使用invoke_shell()来克服这个问题,但它仍然失败(我认为这是因为更改用户也会更改外壳)。

在那之后,我发现了 Fabric 模块,但我能做的最好的事情是在正确的用户登录的情况下打开 SSH shell,但没有选择从代码运行任何命令。

有没有办法做到这一点?最终目标可能是这样的:

ssh.login(temp_user, pass)
ssh.command("su -l myuser")
expect("Password: ", ssh.send("mypass\n")
ssh.command("somescript.sh > datadump.txt")
Run Code Online (Sandbox Code Playgroud)

使用sudo是不可能的,以及添加无密码登录。

正如这里所建议的那样,我尝试使用 Paramiko 的代码:

import paramiko

host = "hostip"
user = "user"
user_to_log = "myuser"
password = "pass"
password_to_log = "mypass"

login_command = "su -l " + user_to_log

ssh = paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostip, username=user, 
    password=password)    

transport = ssh.get_transport()
session = transport.open_session()
session.set_combine_stderr(True)
session.get_pty()


session.exec_command("su -l " …
Run Code Online (Sandbox Code Playgroud)

python linux ssh paramiko fabric

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

Paramiko scp 从远程机器正则表达式复制

有没有办法我可以使用 paramiko scp 复制以名称“output”结尾的远程文件。

我有下面的代码,仅当我提供完整路径或确切的文件名时才会复制

下面是代码

 import paramiko
 import os
 from paramiko import SSHClient
 from scp import SCPClient


def createSSHClient(self, server):
    client = paramiko.SSHClient()
    client.load_system_host_keys()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    client.connect(server, self.port, self.user, self.password)
    return client

  def get_copy(self, hostname, dst):
    ssh = self.createSSHClient(hostname)
    scp = SCPClient(ssh.get_transport())
    scp.get(dst)
    scp.close()
Run Code Online (Sandbox Code Playgroud)

我正在尝试的是

     get_copy(1.1.1.1, "*output")
Run Code Online (Sandbox Code Playgroud)

我收到文件未找到错误

python scp paramiko python-2.7

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

Paramiko exec_command 的实时输出

注意:我看过其他帖子,但没有一个帖子可以解释答案,也没有一个有效的帖子。

有没有办法获得 的输出exec_command,专门用于exec_command('docker run <CONTAINER_ID>')Paramiko 包的实时输出?

python paramiko docker

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

将远程(Paramiko)ssh 命令的输出评估为成功/失败布尔值

我有一个函数来检查文件是否存在,它返回'True'/ 'False',现在我正在将它“转换”为 bool eval(),但是我认为这不是最聪明的解决方案,但我不知道该怎么做它没有不必要的ifs

>>> foo = 'False'
>>> type(eval(foo))
<class 'bool'>
>>> type(foo)
<class 'str'>
Run Code Online (Sandbox Code Playgroud)

例如,我在 ssh 连接的机器上运行这个表达式

"test -e {0} && echo True || echo False".format(self.repo)
Run Code Online (Sandbox Code Playgroud)

像这样,我的结果将是字符串。

def execute(command):
    (_, stdOut, _) = ssh.exec_command(command)
    output = stdOut.read()
    return output.decode('utf-8')
Run Code Online (Sandbox Code Playgroud)

有没有其他方法可以实现这一目标?

python ssh shell paramiko

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

标签 统计

paramiko ×10

python ×10

sftp ×3

fabric ×2

ssh ×2

anaconda ×1

docker ×1

filesize ×1

linux ×1

pandas ×1

python-2.7 ×1

scp ×1

shell ×1