标签: paramiko

Paramiko:模块对象没有属性错误'SSHClient'

我发现如果你命名你的文件"paramiko.py"你得到这个错误,但我将我的文件命名为别的东西,我仍然得到同样的错误.我真的不知道我做错了什么,我相当自信地成功安装了PyCrypto和Paramiko.

import paramiko
ssh = paramiko.SSHClient()
ssh.connect('127.0.0.1', username='meelo_rw', password='')
Run Code Online (Sandbox Code Playgroud)

在Windows 8.1上运行此命令.

python attributes paramiko

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

使用 SCP 的 Python 3 Paramiko

我正在尝试使用基于此模块的 SCP: https: //pypi.python.org/pypi/scp

我尝试运行以下命令:

def scpImport():
    ssh = SSHClient()
    ssh.load_system_host_keys()
    ssh.set_missing_host_key_policy(AutoAddPolicy)
    ssh.connect("IP", port=22)
    with SCPClient(ssh.get_transport()) as scp:
        scp.put('test.txt')
Run Code Online (Sandbox Code Playgroud)

然而,我的程序说:

  File "C:\Python34\lib\site-packages\paramiko\client.py", line 288, in connect
server_key)
TypeError: missing_host_key() missing 1 required positional argument: 'key'
Run Code Online (Sandbox Code Playgroud)

是因为我没有 ssh 的身份验证形式吗?我需要在连接语句中传递私钥/公钥吗?如果是这样,我不确定如何执行此操作,因为该模块的示例很少。

paramiko python-3.x

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

通过paramiko加载ssh .bashrc

我想通过ssh(putty)自动执行相同的操作。使用腻子连接后,我的计算机.bashrc已加载(因此我可以使用别名)。如果我尝试在Python中执行此操作,则别名sanity是不可见的:

sanity: command not found
Run Code Online (Sandbox Code Playgroud)

使用source .bashrc不是解决方案。

 ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect('xxxxxxx', username='x',   password='x',  key_filename=None, look_for_keys=False)
    stdin, stdout, stderr = ssh.exec_command(
    """
    sanity;
    """)

    stdout.flush()
    for line in stdout:
        print line
    print "END"

    print stderr.read()
    ssh.close()
Run Code Online (Sandbox Code Playgroud)

python bash paramiko

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

Paramiko 捕获命令输出

有个问题让我头疼了好几天了。我正在使用带有 Python 2.7.10 的 Paramiko 模块,并且我想向 Brocade 路由器发出多个命令,但只返回给定命令之一的输出,如下所示:

#!/usr/bin/env python
import paramiko, time

router = 'r1.test.example.com'
password = 'password'
username = 'testuser'

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(router, username=username, password=password)
print('Successfully connected to %s' % router)

remote_conn = ssh.invoke_shell()
output = remote_conn.recv(1000)

# Disable paging on Brocade.
remote_conn.send('terminal length 0\n')
# Check interface status.
remote_conn.send('show interfaces ethernet 0/1\n') # I only want output from this command.
time.sleep(2)
output = remote_conn.recv(5000)
print(output)
Run Code Online (Sandbox Code Playgroud)

如果我要打印完整的输出,它将包含发送到路由器的所有内容,但我只想查看 showinterfaces ethernet 0/1\n命令的输出。

任何人都可以帮助解决这个问题吗?

我想问最后一件事。我想过滤变量output并检查是否出现“up”或“down”等字符串,但我似乎无法让它工作,因为输出中的所有内容似乎都在新行上? …

python ssh paramiko python-2.7

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

使用 Paramiko 将文件从远程目录复制到远程子目录

如何将远程服务器中的文件复制/maindir/fil1.txt到子目录/maindir/subdir/file1.txt。我使用 实现了 SFTP paramiko。但它总是检查要复制的本地路径。

filename_full_path='/maindir/fil1.txt'
destfilename_full_path='/maindir/subdir/file1.txt'
sftp.put(filename_full_path, destfilename_full_path)
Run Code Online (Sandbox Code Playgroud)

如何告诉SFTP本地路径也在远程主机中?

python sftp paramiko

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

使用 Paramiko 的 SFTPClient 在远程路径中使用通配符

我想将文件从远程服务器复制到本地。

import paramiko
paramiko.util.log_to_file('/tmp/paramiko.log')

# open transport
username = "user"
host="example.com"
port = 22
transport = paramiko.Transport((host, port))
transport.start_client()
private_key_file = "/home/user/.ssh/id_rsa"
agent = paramiko.Agent()
key = paramiko.RSAKey.from_private_key_file(private_key_file)
transport.auth_publickey(username, key)

# get sftp client
sftp = paramiko.SFTPClient.from_transport(transport)
source = "/home/user/user_1.csv"
target = "/home/local/local_sftp.txt"
sftp.get(x[0], x[1])
Run Code Online (Sandbox Code Playgroud)

上面的代码工作正常,但我想使用source = "/home/user/user_*.csv"但未评估此通配符。有人可以帮我解决这个问题。

我找到了一种解决方案,SCPClient但无法解决SFTPClient.

python sftp paramiko

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

Paramiko 或 sshtunnel 和 ssh-agent 无需输入密码

我正在尝试使用 sshtunnel 创建到服务器的隧道。我正在使用 ssh-key 和 ssh-agent:

from sshtunnel import SSHTunnelForwarder

with SSHTunnelForwarder(
    (proxyhost, 22),
    ssh_username=ssh_username,
    #ssh_private_key_password=PASSPHRASE, # with this line it works
    remote_bind_address=('127.0.0.1', 3306),
) as tunnel:
    pass
Run Code Online (Sandbox Code Playgroud)

找到正确的私钥,当我给出密码作为参数时,隧道就建立了(请参见上面的注释行)。

但我已经使用 ssh-agent 解锁了我的 ssh 私钥(只有在重新启动后第一次使用 ssh 时才会要求我提供 ssh 密码)。是否可以让 paramiko/sshtunnel 获取解锁的私钥而不提示输入密码?我想避免将我的密码存储在磁盘上的任何位置。

python paramiko ssh-tunnel ssh-agent

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

如何解决“paramiko.ssh_exception.SSHException:无法从ssh-agent获取密钥”

我正在尝试使用 Paramiko Python 模块通过 SSH 连接到远程服务器。在 CentOS 7 服务器上使用 Python 3.6.7 版安装。但是收到以下错误。

python
import paramiko
>>> ssh = paramiko.SSHClient()
>>> ssh.load_system_host_keys()
>>> ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
>>> ssh.connect("19.16.2.2", username="user1", password="pass")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.6/site-packages/paramiko/client.py", line 424, in connect
    passphrase,
  File "/usr/local/lib/python3.6/site-packages/paramiko/client.py", line 643, in _auth
    self._agent = Agent()
  File "/usr/local/lib/python3.6/site-packages/paramiko/agent.py", line 372, in __init__
    self._connect(conn)
  File "/usr/local/lib/python3.6/site-packages/paramiko/agent.py", line 68, in _connect
    raise SSHException('could not get keys from ssh-agent')
paramiko.ssh_exception.SSHException: could not get keys from …
Run Code Online (Sandbox Code Playgroud)

python ssh centos paramiko python-3.x

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

如何在没有登录信息的情况下验证 SSH 连接是否可行?

我正在尝试编写一个 python2.7 函数,它可以判断是否可以使用 SSH 协议连接到特定的 IP 地址(主机)。问题是我必须在没有我要连接的设备的登录信息的情况下执行此操作。我的计划是尝试使用空字符串作为用户名和密码进行连接,然后使用它抛出的异常来确定它是否可以连接。我的推理是,例如,如果它抛出一个 AuthenticationException ,它一定已经尝试连接但只是确定登录信息无效。到目前为止,这是我的代码:

def ssh(host):
try:
    s = paramiko.SSHClient()
    s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    s.connect(host, username=None, password=None)

except(paramiko.ssh_exception.AuthenticationException,
       paramiko.ssh_exception.BadAuthenticationType,
       paramiko.ssh_exception.BadHostKeyException,
      paramiko.ssh_exception.PasswordRequiredException,
      paramiko.ssh_exception.PartialAuthentication):
    return True

except Exception as e:
    print(e)
    return False
Run Code Online (Sandbox Code Playgroud)

当我运行它时,它总是返回 false 并输出: No authentication methods available

我的问题是:

  1. 这是实现我想要的可行策略吗?
  2. 哪些异常是由错误的凭据引起的,哪些是由更严重的问题引起的,即使使用正确的凭据也会阻止连接?
  3. 哪个函数正在打印到控制台,我该如何停止它?我想自己处理错误消息。

提前致谢!

python ssh exception-handling paramiko

0
推荐指数
1
解决办法
2812
查看次数

使用 Paramiko 无法获得 stderr

由于某些原因,我不得不使用mysqlParamiko。

我有这个(简化的)片段:

stdin, stdout, stderr = c.exec_command("mysql stuff -e 'rename table foo to bar'")
print stdout.read()
print stderr.read()
Run Code Online (Sandbox Code Playgroud)

但如果表foo不存在,我就没有输出(没有stdoutstdin输出)。

但这很奇怪,因为:

stdin, stdout, stderr = c.exec_command("mysql stuff -e 'rename table foo to bar'")
if stderr.read()
    print "Error: %s" % stderr.read()
    print type(stderr.read())
Run Code Online (Sandbox Code Playgroud)

有这个输出:

Error:
<type 'str'>
Run Code Online (Sandbox Code Playgroud)

mysql错误通常是:

第 1 行出现错误 1017 (HY000):找不到文件:“./stuff/foo.frm”(错误号:2 - 没有这样的文件或目录)

我想要更详细的错误输出,但我不能。为什么?

python mysql ssh paramiko python-2.7

0
推荐指数
1
解决办法
4445
查看次数

如何使用 paramiko SSHClient 获得连续输出

我想 ssh 到远程服务器并运行一些 shell 脚本(如 scp 或 yum 等)。

一切都很顺利,除了我无法连续获得诸如 scp 进度或 yum 下载进度之类的标准输出。将f.read被阻止并且不会返回任何内容。

我猜 paramiko 可能会逐行传输假的标准输出流,但这些渐进输出不会输出行分隔符,而是输出“\r”。

有办法解决这个问题吗?

这就是我现在正在做的事情,在ssh哪里paramiko.SSHClient()

def read_buffer_line(f):
    line = ""
    while not f.channel.exit_status_ready():
        c = f.read(1)
        if c == '\n':
            yield line
            line = ''
        else:
            line += c
    yield line + f.read()

def ssh_run(ssh, cmd):
    stdin, stdout, sterr = ssh.exec_command(cmd, get_pty=True, bufsize=1)
    for l in read_buffer_line(stdout):
        print l
Run Code Online (Sandbox Code Playgroud)

python ssh paramiko python-2.7

0
推荐指数
1
解决办法
2019
查看次数

知道为什么 paramiko 发送 \x07 而不是 \t 到远程服务器吗?

在过去的几天里,我一直在努力弄清楚为什么 paramiko 发送 \x07 而不是 tab 到远程会话。我使用 paramikos invoke_shell 因为我需要运行几个互连的命令。除了这部分之外,一切正常:

check_export = f'echo -e \"this\tis\tjust a test\" > /tmp/export'
Run Code Online (Sandbox Code Playgroud)

这是简化版本,唯一重要的部分是我需要用制表符分隔单词(仅在某些地方)。print 返回正确的形式:

echo -e "this   is      just a test" > /tmp/export
Run Code Online (Sandbox Code Playgroud)

但是当我从 paramiko 会话检查 recv() 时,我看到了这个:

b'echo -e "this\x07is\x07just a test" > /tmp/export\r\n[root@server~]# '
Run Code Online (Sandbox Code Playgroud)

因此,文件 /tmp/export 不包含制表符,并且前 3 个单词被挤在一起。我尝试提供文字选项卡,\t,U00000009,但没有任何效果。
我还尝试对字符串执行 .encode() ,但出现错误,指出需要字节,而不是字符串。

我在这里缺少什么?我希望得到一些意见。谢谢

python paramiko

0
推荐指数
1
解决办法
340
查看次数

Paramiko的SFTP Python连接

我正在尝试使用Paramiko的库http://docs.paramiko.org/en/2.1/api/sftp.html与Python(v2.7)建立SFTP连接

通过网上的零碎零碎,我能够(无论如何也是如此)使用私有加密证书进行连接。

如下所示:

import paramiko
sftp = paramiko.SSHClient()

hostname = "sftp.host.com"
port = 8022
username = "sftplogin"

k = paramiko.RSAKey.from_private_key_file("private.pem", password="XXX")
sftp.set_missing_host_key_policy(paramiko.AutoAddPolicy())
print "Connecting..."
sftp.connect(hostname, port, username=username, pkey=k )
print "Connected to: " + hostname + ":" + port
print sftp.getcwd()
sftp.close()
Run Code Online (Sandbox Code Playgroud)

在这一点上,我只是想看看我是否没有妄想,并且实际上没有连接,所以我试图打印一个getcwd()来获取当前目录……可惜的是我什么都没有,因为它返回此错误:

AttributeError:“ SSHClient”对象没有属性“ getcwd”

谁能告诉我为什么?我究竟做错了什么?

提前致谢!

python ssh sftp paramiko

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