相关文章推荐
绅士的竹笋  ·  kb-python · PyPI·  10 月前    · 
仗义的冲锋衣  ·  乘借科技援疆东风 共建现代化大油气田 ...·  1 年前    · 
谦和的豌豆  ·  加拿大小型农场出售-西瓜视频搜索·  1 年前    · 
怕老婆的跑步机  ·  htmlunit使用代理IP_htmluni ...·  2 年前    · 
潇洒的皮带  ·  享受和罗洗河零距离的感觉(组图)-搜狐新闻·  2 年前    · 
Code  ›  python - 如何在 Paramiko 的单个会话中执行多个命令? (Python) -
python python函数 paramiko stderr
https://segmentfault.com/q/1010000043222863
直爽的小蝌蚪
2 年前
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 许可协议

     
    推荐文章
    绅士的竹笋  ·  kb-python · PyPI
    10 月前
    仗义的冲锋衣  ·  乘借科技援疆东风 共建现代化大油气田 -中华人民共和国科学技术部
    1 年前
    谦和的豌豆  ·  加拿大小型农场出售-西瓜视频搜索
    1 年前
    怕老婆的跑步机  ·  htmlunit使用代理IP_htmlunit设置ip代理-CSDN博客
    2 年前
    潇洒的皮带  ·  享受和罗洗河零距离的感觉(组图)-搜狐新闻
    2 年前
    今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
    删除内容请联系邮箱 2879853325@qq.com
    Code - 代码工具平台
    © 2024 ~ 沪ICP备11025650号