你如何使用paramiko传输完整的目录?我正在尝试使用:
sftp.put("/Folder1","/Folder2")
Run Code Online (Sandbox Code Playgroud)
这给了我这个错误 -
Error : [Errno 21] Is a directory
Run Code Online (Sandbox Code Playgroud) 我想tail -f logfile使用python的paramiko模块在远程机器上运行命令.到目前为止,我一直在尝试以下方式:
interface = paramiko.SSHClient()
#snip the connection setup portion
stdin, stdout, stderr = interface.exec_command("tail -f logfile")
#snip into threaded loop
print stdout.readline()
Run Code Online (Sandbox Code Playgroud)
我希望命令在必要时运行,但我有两个问题:
shutdown()在我通过时使用频道上的命令 - 但这看起来很混乱.有可能做一些像发送Ctrl-C到频道的标准输入的东西吗?readline() 块,如果我有一个非阻塞的输出方法,我可以避免线程 - 任何想法?我有一个在 CentOS Linux 7.7 上运行的 Python 3 应用程序,对远程主机执行 SSH 命令。它工作正常,但今天我在对“新”远程服务器(基于 RHEL 6.10 的服务器)执行命令时遇到了一个奇怪的错误:
遇到 RSA 密钥,预期的 OPENSSH 密钥
从系统 shell 执行相同的命令(当然使用相同的私钥)效果非常好。
在远程服务器上,我发现/var/log/secure当使用 Python(使用 Paramiko)从源服务器发出 SSH 连接和命令时,sshd 会抱怨不支持的公钥算法:
userauth_pubkey:不支持的公钥算法:rsa-sha2-512
请注意,具有更高 RHEL/CentOS(如 7.x)的目标服务器不会遇到此问题。
看起来 Paramiko 在与远程服务器协商时选择/提供了错误的算法,而相反 SSH shell 在此“旧”目标服务器的上下文中正确执行协商。如何让Python程序按预期工作?
Python代码
import paramiko
import logging
ssh_user = "my_user"
ssh_keypath = "/path/to/.ssh/my_key.rsa"
server = "server.tld"
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(server,port=22,username=ssh_user, key_filename=ssh_keypath)
# SSH command
cmd = "echo TEST : $(hostname)"
stdin, stdout, stderr = ssh_client.exec_command(cmd, get_pty=True)
exit_code = stdout.channel.recv_exit_status()
cmd_raw_output = stdout.readlines() …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Paramiko连接到远程主机并执行一些文本文件替换.
i, o, e = client.exec_command("perl -p -i -e 's/" + initial + "/"
+ replaced + "/g'" + conf);
Run Code Online (Sandbox Code Playgroud)
其中一些命令需要以sudo身份运行,这会导致:
sudo:对不起,你必须有一个tty来运行sudo
我可以使用-t开关和ssh强制伪tty分配.
是否有可能使用paramiko做同样的事情?
如下所示,是否可以保存结果?原因,在第二和第三stdout.read()我无法达到结果.
import paramiko
import os
dssh = paramiko.SSHClient()
dssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
dssh.connect('192.168.1.250', username='root', password='pass')
import os
stdin, stdout, stderr = dssh.exec_command('ifconfig')
print stdout.read()
print ('Sleeping 2 seconds!')
os.system('sleep 2')
stdin, stdout, stderr = dssh.exec_command('ls -l')
print stdout.read()
print stdout.read()
print stdout.read()
dssh.close()
Run Code Online (Sandbox Code Playgroud) 所以我正在尝试创建一个aws lambda函数,登录实例并做一些事情.并且该脚本在lambda之外工作正常,但是当我使用与此https://aws.amazon.com/blogs/compute/scheduling-ssh-jobs-using-aws-lambda/相同的说明打包它时,它不会工作.它抛出了这个错误.
libffi-72499c49.so.6.0.4: cannot open shared object file: No such file or directory: ImportError
Traceback (most recent call last):
File "/var/task/lambda_function.py", line 12, in lambda_handler
key = paramiko.RSAKey.from_private_key(key)
File "/var/task/paramiko/pkey.py", line 217, in from_private_key
key = cls(file_obj=file_obj, password=password)
File "/var/task/paramiko/rsakey.py", line 42, in __init__
self._from_private_key(file_obj, password)
File "/var/task/paramiko/rsakey.py", line 168, in _from_private_key
self._decode_key(data)
File "/var/task/paramiko/rsakey.py", line 173, in _decode_key
data, password=None, backend=default_backend()
File "/var/task/cryptography/hazmat/backends/__init__.py", line 35, in default_backend
_default_backend = MultiBackend(_available_backends())
File "/var/task/cryptography/hazmat/backends/__init__.py", line 22, in _available_backends
"cryptography.backends" …Run Code Online (Sandbox Code Playgroud) 我使用Paramiko提供的ssh客户端来创建一个函数调用'remoteSSH'(文件名是remoteConnect.py):
import paramiko
import logging
logger = paramiko.util.logging.getLogger()
logger.setLevel(logging.WARN)
def remoteSSH(username,userpasswd):
....
Run Code Online (Sandbox Code Playgroud)
现在我在另一个名为getData()(getdata.py)的Python模块中调用remoteSSH函数:
from remoteConnect import *
import logging
logger2=logging.getLogger()
logger2.setLevel(logging.INFO)
Run Code Online (Sandbox Code Playgroud)
但是,调用logger2.info('ccc')也会打开导入Paramiko模块的文件中的所有INFO级别日志记录(即remoteConnect.py)
如何关闭登录remoteConnect.py以便Paramiko不会吐出所有INFO级别的消息?
我正在寻找一种为此设置超时的方法:
transport = paramiko.Transport((host, port))
transport.connect(username = username, password = password)
sftp = paramiko.SFTPClient.from_transport(transport)
sftp.get(remotepath, localpath)
sftp.close()
transport.close()
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Paramiko从Python连接到SSH服务器.这是我到目前为止所尝试的:
>>> import paramiko
>>> import os
>>> privatekeyfile = os.path.expanduser('~/.ssh/id_rsa')
>>> mykey = paramiko.RSAKey.from_private_key_file(privatekeyfile)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/paramiko/pkey.py", line 198, in from_private_key_file
key = cls(filename=filename, password=password)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/paramiko/rsakey.py", line 51, in __init__
self._from_private_key_file(filename, password)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/paramiko/rsakey.py", line 163, in _from_private_key_file
data = self._read_private_key_file('RSA', filename, password)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/paramiko/pkey.py", line 280, in _read_private_key_file
data = self._read_private_key(tag, f, password)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/paramiko/pkey.py", line 323, in _read_private_key
raise PasswordRequiredException('Private key file is encrypted')
paramiko.PasswordRequiredException: Private …Run Code Online (Sandbox Code Playgroud) paramiko ×10
python ×9
ssh ×6
aws-lambda ×1
linux ×1
logging ×1
private-key ×1
save ×1
scp ×1
timeout ×1