我正在重写我写入Python的Bash脚本.那个剧本的关键是
ssh -t first.com "ssh second.com very_remote_command"
Run Code Online (Sandbox Code Playgroud)
我在使用paramiko进行嵌套身份验证时遇到问题.我无法找到任何处理我的确切情况的例子,但我能够在远程主机上找到sudo的例子.
第一种方法写入stdin
ssh.connect('127.0.0.1', username='jesse', password='lol')
stdin, stdout, stderr = ssh.exec_command("sudo dmesg")
stdin.write('lol\n')
stdin.flush()
Run Code Online (Sandbox Code Playgroud)
第二个创建一个通道并使用类似socket的send和recv.
我能够让stdin.write与sudo一起工作,但它不能与远程主机上的ssh一起使用.
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('first.com', username='luser', password='secret')
stdin, stdout, stderr = ssh.exec_command('ssh luser@second.com')
stdin.write('secret')
stdin.flush()
print '---- out ----'
print stdout.readlines()
print '---- error ----'
print stderr.readlines()
ssh.close()
Run Code Online (Sandbox Code Playgroud)
... ...打印
---- out ----
[]
---- error ----
['Pseudo-terminal will not be allocated …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用python中的ssh从服务器读取文件.我正在使用paramiko进行连接.我可以连接到服务器并运行像'cat filename'这样的命令并从服务器获取数据,但我尝试读取的一些文件大小约为1 GB或更多.
如何使用python逐行读取服务器上的文件?
附加信息:经常做的是运行'cat filename'命令并将结果存储在变量中并解决该问题.但由于这里的文件非常大,我正在寻找一种逐行读取文件的方法.
编辑:我可以读取一堆数据并将其拆分成行,但问题是缓冲区中接收的数据并不总是包含完整的行.例如,如果缓冲区有300行,则最后一行可能只是服务器上行的一半,下一半将在下次调用服务器时获取.我想要完整的线条
编辑2:我可以使用什么命令在特定范围内的文件中打印行.喜欢打印前100行,那么接下来的100行等等?这样缓冲区将始终包含完整的行.
我正在学习python.我需要隧道创建者从数据库中读取信息并关闭隧道.我使用paramiko,但我没有使用tonelem示例.请举一个简单代码创建隧道的例子.
提前致谢!
我安装并编写了以下无法放入文件的Paramiko.它很容易'获取'文件并在其上执行'ls'命令.
#set username & password
username='runaway'
password='runaway'
port=22
source= '/Unzip.sh'
destination ='/var/mpx/www/http'
#SFTP
client.load_system_host_keys()
print " hostname =%s \n username=%s \n password=%s \n" (hostname,username,password)
t = paramiko.Transport((hostname, port))
t.connect(username=username,password=password)
sftp = paramiko.SFTPClient.from_transport(t)
sftp.put(source,destination)
#sftp.close()
#t.close()
Run Code Online (Sandbox Code Playgroud)
使用'put'命令会出现以下错误和堆栈跟踪 -
File "upload_file.py", line 84, in ?
sftp.put(source,destination)
File "/usr/lib/python2.4/site-packages/paramiko/sftp_client.py", line 522, in put
fr = self.file(remotepath, 'wb')
File "/usr/lib/python2.4/site-packages/paramiko/sftp_client.py", line 221, in open
t, msg = self._request(CMD_OPEN, filename, imode, attrblock)
File "/usr/lib/python2.4/site-packages/paramiko/sftp_client.py", line 572, in _request
return self._read_response(num)
File "/usr/lib/python2.4/site-packages/paramiko/sftp_client.py", line 619, in …Run Code Online (Sandbox Code Playgroud) 我正在尝试开始使用Paramiko库,但是当我尝试连接以下简单程序时,库就会抛出异常:
import paramiko
ssh = paramiko.SSHClient()
ssh.connect('127.0.0.1', username='boatzart', password='mypassword')
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
Traceback (most recent call last):
File "test.py", line 6, in <module>
ssh.connect('127.0.0.1')
File "build/bdist.macosx-10.7-intel/egg/paramiko/client.py", line 316, in connect
File "build/bdist.macosx-10.7-intel/egg/paramiko/client.py", line 85, in missing_host_key
paramiko.SSHException: Unknown server 127.0.0.1
Run Code Online (Sandbox Code Playgroud)
无论我尝试哪种服务器都会发生这种情况
使用本地运行的python交互式shell和openssh,我使用paramiko继续获得"No existing session"异常.我的代码如下.
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('localhost',username=name,password=pw)
Run Code Online (Sandbox Code Playgroud)
结果是:
No handlers could be found for logger "paramiko.transport"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.6/dist-packages/paramiko-1.7.7.1-py2.6.egg/paramiko/client.py", line 332, in connect
self._auth(username, password, pkey, key_filenames, allow_agent, look_for_keys)
File "/usr/local/lib/python2.6/dist-packages/paramiko-1.7.7.1-py2.6.egg/paramiko/client.py", line 493, in _auth
raise saved_exception
paramiko.SSHException: No existing session
Run Code Online (Sandbox Code Playgroud)
我以前能够连接,但一直试图调整这个以允许基于密钥的授权.那失败了,从那时起我就无法在本地连接.我试过重启openssh,并成功连接到另一台服务器.在这里搜索之后,我发现的所有内容都是授权例外,这里似乎并非如此.
我想用Python上传远程服务器上的文件.我想事先检查远程路径是否真的存在,如果不存在,则要创建它.在伪代码中:
if(remote_path not exist):
create_path(remote_path)
upload_file(local_file, remote_path)
Run Code Online (Sandbox Code Playgroud)
我正在考虑在Paramiko中执行命令来创建路径(例如mkdir -p remote_path).我想出了这个:
# I didn't test this code
import paramiko, sys
ssh = paramiko.SSHClient()
ssh.connect(myhost, 22, myusername, mypassword)
ssh.exec_command('mkdir -p ' + remote_path)
ssh.close
transport = paramiko.Transport((myhost, 22))
transport.connect(username = myusername, password = mypassword)
sftp = paramiko.SFTPClient.from_transport(transport)
sftp.put(local_path, remote_path)
sftp.close()
transport.close()
Run Code Online (Sandbox Code Playgroud)
但是这个解决方案对我来说听起来不太好,因为我关闭连接然后再次重新打开它.有没有更好的方法呢?
我花了两天时间尝试为Paramiko模块安装pyCrypto.
所以,我遇到的第一个问题是:
>>> import paramiko
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Program Files\Python\lib\site-packages\paramiko\__init__.py", line 31
, in <module>
from paramiko.transport import SecurityOptions, Transport
File "C:\Program Files\Python\lib\site-packages\paramiko\transport.py", line 4
7, in <module>
from paramiko.dsskey import DSSKey
File "C:\Program Files\Python\lib\site-packages\paramiko\dsskey.py", line 26,
in <module>
from Crypto.PublicKey import DSA
ImportError: No module named 'Crypto'
Run Code Online (Sandbox Code Playgroud)
实际上它非常有趣,因为我使用Windows并且它不关心大写.我将文件夹名称从crypto更改为Crypto,这个特殊问题消失了.
现在它想要winrandom:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Program Files\Python\lib\site-packages\paramiko\__init__.py", line 31
, in <module>
from paramiko.transport …Run Code Online (Sandbox Code Playgroud) 尝试使用paramiko库ssh到Cisco ACS设备时出现以下错误.我已经在python中使用了paramiko而没有问题,我可以从命令行ssh到这个框,或者使用putty而没有问题.我打开了调试并在这里复制了信息.如果你能帮助我,请告诉我.
import paramiko
import sys
import socket
try:
paramiko.common.logging.basicConfig(level=paramiko.common.DEBUG)
sshConnection = paramiko.SSHClient()
sshConnection.set_missing_host_key_policy(paramiko.AutoAddPolicy())
sshConnection.connect('server',username='username',password='password')
except paramiko.BadAuthenticationType:
sys.stdout.write('Bad Password!\n')
sys.exit()
except paramiko.SSHException, sshFail:
sys.stdout.write('Connection Failed!\n')
sys.stdout.write('%s\n' % sshFail)
sys.exit()
except socket.error, socketFail:
sys.stdout.write('Failed to open socket\n')
sys.stdout.write('%s\n' % socketFail)
sys.exit()
Run Code Online (Sandbox Code Playgroud)
并返回调试输出:
DEBUG:paramiko.transport:starting thread (client mode): 0x14511d0L
INFO:paramiko.transport:Connected (version 2.0, client OpenSSH_5.3)
DEBUG:paramiko.transport:kex algos:['diffie-hellman-group14-sha1'] server key:['ssh-rsa'] client encrypt:['aes256-cbc', 'aes128-cbc', '3des-cbc'] server encrypt:['aes256-cbc', 'aes128-cbc', '3des-cbc'] client mac:['hmac-sha1'] server mac:['hmac-sha1'] client compress:['none', 'zlib@openssh.com'] server compress:['none', 'zlib@openssh.com'] client lang:[''] server lang:[''] kex follows?False
ERROR:paramiko.transport:Exception: …Run Code Online (Sandbox Code Playgroud)