我希望能够将Java应用程序中表示为字符串的许多连续命令发送到SSH服务器以供执行.我应该使用:
Channel channel = session.openChannel("shell");
Run Code Online (Sandbox Code Playgroud)
-要么-
Channel channel = session.openChannel("exec");
Run Code Online (Sandbox Code Playgroud) 我正在使用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解决方案:)
我正在尝试使用 Paramiko 将 SSH 连接到 Brocade 交换机并执行远程命令。代码如下:
def ssh_connector(ip, userName, passWord, command):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip, username=userName, password=passWord, port=22)
stdin, stdout, stderr = ssh.exec_command(command)
print stdout.readlines()
ssh_connector(ip, userName, passWord, 'show running-config')
Run Code Online (Sandbox Code Playgroud)
在尝试运行代码时,我遇到了一个奇怪的错误,如下所示。
协议错误,不是以 scp 开头!
我不知道错误的原因,也不知道 SSH 连接是否成功。你能帮我解决这个问题吗?
我使用Python的Paramiko库来SSH远程机器并从命令行获取一些输出.我看到很多垃圾打印和实际输出.如何摆脱这个?
chan1.send("ls\n")
output = chan1.recv(1024).decode("utf-8")
print(output)
[u'Last login: Wed Oct 21 18:08:53 2015 from 172.16.200.77\r', u'\x1b[2J\x1b[1;1H[local]cli@BENU>enable', u'[local]cli@BENU#Configure',
Run Code Online (Sandbox Code Playgroud)
我想从输出中消除[2J\x1b [1; 1H和 u].他们是垃圾.
我试图sesu在Paramiko的帮助下从Python在Unix服务器中运行命令exec_command。但是,当我运行此命令exec_command('sesu test')时,
sh:sesu:未找到
当我运行简单ls命令时,它会提供所需的输出。仅使用sesu命令无法正常工作。
这是我的代码的样子:
import paramiko
host = host
username = username
password = password
port = port
ssh=paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip,port,username,password)
stdin,stdout,stderr=ssh.exec_command('sesu test')
stdin.write('Password')
stdin.flush()
outlines=stdout.readlines()
resp=''.join(outlines)
print(resp)
Run Code Online (Sandbox Code Playgroud) 在过去的几天里,我一直在努力弄清楚为什么 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() ,但出现错误,指出需要字节,而不是字符串。
我在这里缺少什么?我希望得到一些意见。谢谢
paramiko ×5
python ×5
ssh ×5
shell ×2
ansi-escape ×1
interactive ×1
java ×1
jsch ×1
stdout ×1
switching ×1