相关文章推荐
忧郁的皮带  ·  python之subprocess.Pope ...·  2 周前    · 
不爱学习的火车  ·  定安印象 -- 定安文化 -- 定安县人民政府·  7 月前    · 
从容的梨子  ·  地狱恶兽撕碎黑暗圣骑,古代熔炉竟是莎尔神殿【 ...·  9 月前    · 
打盹的刺猬  ·  【资源】GBA火纹修改器FEBuilder长 ...·  9 月前    · 
酷酷的金鱼  ·  verilog语言设计温度检测lcd显示 ...·  9 月前    · 
慷慨的圣诞树  ·  IBM WebSphere ...·  1 年前    · 
Code  ›  python - 如何在 Paramiko 的单个会话中执行多个命令? (Python) -
python python函数 paramiko stderr
https://segmentfault.com/q/1010000043222863
直爽的小蝌蚪
1 年前
segmentfault segmentfault
注册登录
问答 博客 标签 活动
发现
✓ 使用“Bing”搜本站 使用“Google”搜本站 使用“百度”搜本站 站内搜索
注册登录
  1. 首页
  2. 问答
  3. Stack Overflow 翻译
  4. 问答详情

如何在 Paramiko 的单个会话中执行多个命令? (Python)

社区维基
1
发布于
1 月 3 日
新手上路,请多包涵
def exec_command(self, command, bufsize=-1):
    #print "Executing Command: "+command
    chan = self._transport.open_session()
    chan.exec_command(command)
    stdin = chan.makefile('wb', bufsize)
    stdout = chan.makefile('rb', bufsize)
    stderr = chan.makefile_stderr('rb', bufsize)
    return stdin, stdout, stderr

在 paramiko 中执行命令时,它总是会在您运行 exec_command 时重置会话。我希望能够执行 sudo 或 su,并且在运行另一个 exec_command 时仍然拥有这些特权。另一个例子是尝试执行 exec_command(“cd /”) 然后再次运行 exec_command 并将其放在根目录中。我知道您可以执行类似 exec_command(“cd /; ls -l”) 的操作,但我需要在单独的函数调用中执行。

原文由 Takkun 发布,翻译遵循 CC BY-SA 4.0 许可协议

Stack Overflow 翻译 python paramiko
阅读 276
2 个回答
得票 最新
社区维基
1
发布于
1 月 3 日
✓ 已被采纳

非交互式用例

这是一个 非交互式 示例……它发送 cd tmp , ls 然后 exit 。

 import sys
sys.stderr = open('/dev/null')       # Silence silly warnings from paramiko
import paramiko as pm
sys.stderr = sys.__stderr__
import os
class AllowAllKeys(pm.MissingHostKeyPolicy):
    def missing_host_key(self, client, hostname, key):
        return
HOST = '127.0.0.1'
USER = ''
PASSWORD = ''
client = pm.SSHClient()
client.load_system_host_keys()
client.load_host_keys(os.path.expanduser('~/.ssh/known_hosts'))
client.set_missing_host_key_policy(AllowAllKeys())
client.connect(HOST, username=USER, password=PASSWORD)
channel = client.invoke_shell()
stdin = channel.makefile('wb')
stdout = channel.makefile('rb')
stdin.write('''
cd tmp
print stdout.read()
stdout.close()
stdin.close()
client.close()

交互式用例

如果您有交互式 ssh 用例, paramiko 可以处理它…我个人会使用 scrapli 来驱动交互式 ssh 会话。

列出我能想到的所有交互使用 paramiko 的方法:

  • 请参阅 nagabhushan 的答案,它以交互方式使用 paramiko
  • 默认情况下, ansible paramiko 的使用是可配置的
  • 默认情况下, exscript ssh 使用 paramiko
  • 默认情况下, netmiko ssh 使用 paramiko
  • 默认情况下, scrapli ssh 使用 paramiko
  • 我可能错过了一些使用 paramiko 的库,但应该清楚的是 paramiko 被控制 ssh 会话的 python 库广泛使用。

    原文由 Mike Pennington 发布,翻译遵循 CC BY-SA 4.0 许可协议

     
    推荐文章
    忧郁的皮带  ·  python之subprocess.Popen常用案例_python patool subprocess.popen指定编码
    2 周前
    不爱学习的火车  ·  定安印象 -- 定安文化 -- 定安县人民政府
    7 月前
    从容的梨子  ·  地狱恶兽撕碎黑暗圣骑,古代熔炉竟是莎尔神殿【博德之门3】剧情精讲P9【完结】_单机游戏热门视频
    9 月前
    打盹的刺猬  ·  【资源】GBA火纹修改器FEBuilder长期更新贴【封印之剑吧】_百度贴吧
    9 月前
    酷酷的金鱼  ·  verilog语言设计温度检测lcd显示 - CSDN文库
    9 月前
    慷慨的圣诞树  ·  IBM WebSphere Application Server Network Deployment, Version 6: Developing and deploying application
    1 年前
    今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
    删除内容请联系邮箱 2879853325@qq.com
    Code - 代码工具平台
    © 2024 ~ 沪ICP备11025650号