python使用paramiko模块ssh连接远程主机,环境变量问题

本文分享了使用Python Paramiko模块远程执行命令时遇到的环境变量问题及解决方案。作者最初遇到“command not found”错误,通过设置bash登录模式解决了问题。最终采用ssh.exec_command('bash -lc 'echo $PATH'')的方式成功获取正确的环境变量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有个需求需要在一台机器上通过非手动登录的方式在另一台机器上执行命令,于是我找到了Python的paramiko模块,SSHclient可以满足要求执行命令。过了一阵子测试发现有的命令执行不了,错误提示是:command not found,但是在目标机器上可以执行,无语啊。。。验证了一下测试的说法,怀疑是环境变量的问题,但是还是不懂该怎么设置,上百度搜索一波,找了几个相同问题的博客,但是他们的解决方法试过了本地都不行,期间发现一个说明shell模式的博客,讲的很细致,有一个关键点——通过SSH执行命令脚本时在脚本的第一行加上注释#!/bin/bash --login 这样就能解决环境变量的问题,我验证了一下的确可行,但是我不想改当前的代码,把执行的命令全部封装成文件,心好累。继续搜索,后来在Google上搜索了一下paramilko command not found,终于在Stack Overflow上找到了答案
stdin, stdout, stderr = ssh.exec_command("bash -lc 'echo $PATH'") ,抱着试一下的态度验证成功了,哈哈,皇天不负有心人呀,结合之前搜索的博客,我好想有点明白了,在机器上输入命令man bash,看了一遍命令的参数说名,原来bash 的参数 -l 和 --login功能相同,即可以设置bash为前面博文提到的shell 的一种login模式,这样环境变量就是正常的了。然后我把所有的命令都封装了一下加上了 bash -lc 的外壳,在测试那边通过了验证,嘿嘿。

参考博文:shell模式说明
https://stackoverflow.com/questions/17661657/python-paramiko-ssh-session-does-not-get-the-system-path

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值