max*_*max 9 python system path paramiko
我遇到一个问题,当我ssh到另一台机器时,我的paramiko ssh会话看不到与我手动ssh到机器时相同的系统路径.这是我的python代码:
cmd = "echo $PATH"
try:
ssh.connect(ip, username=username, password=password)
except Exception as ex:
raise Exception("Failed to connect to %s with credentials username='%s' password='%s' %s" \
% (ip, username, password, ex.message) )
ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command(cmd)
output = ssh_stdout.read()
Run Code Online (Sandbox Code Playgroud)
输出显示/ usr/bin:/ bin但是当我手动ssh到机器时,系统PATH上还有其他几个路径.请帮忙.
brj*_*aga 12
我不认为在使用exec_command()时会获取任何bashrc或profile脚本.也许尝试以下方法:
stdin, stdout, stderr = ssh.exec_command("bash -lc 'echo $PATH'")
my_path = stdout.read().rstrip()
Run Code Online (Sandbox Code Playgroud)
如果问题是你正在尝试运行一个通常在你的PATH中的命令,但是当你使用exec_command()时,你可能最好用它的绝对路径调用命令(运行"which [command]")当你正常登录到另一台机器时,找出它是什么).
最好在运行命令之前加载bash_profile.否则,您可能会收到"未找到命令"的异常.
例如,我编写命令command = 'mysqldump -uu -pp -h1.1.1.1 -P999 table > table.sql'是为了转储Mysql表
然后我必须通过键入在该转储命令之前手动加载bash_profile . ~/.profile; .~/.bash_profile;.
my_command = 'mysqldump -uu -pp -h1.1.1.1 -P999 table > table.sql;'
pre_command = """
. ~/.profile;
. ~/.bash_profile;
"""
command = pre_command + my_command
stdin, stdout, stderr = ssh.exec_command(command)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4151 次 |
| 最近记录: |