【问题标题】:ssh via paramiko load .bashrc通过 paramiko 加载 .bashrc 的 ssh
【发布时间】:2015-08-21 12:05:51
【问题描述】:

我想自动化我通过 ssh (putty) 执行的相同操作。 使用腻子连接后,我的.bashrc 被加载(所以我可以使用别名)。如果我尝试在 Python 中执行此操作,则别名 sanity 是不可见的:

sanity: command not found

使用source .bashrc 不是解决方案。

 ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect('xxxxxxx', username='x',   password='x',  key_filename=None, look_for_keys=False)
    stdin, stdout, stderr = ssh.exec_command(
    """
    sanity;
    """)

    stdout.flush()
    for line in stdout:
        print line
    print "END"

    print stderr.read()
    ssh.close()

【问题讨论】:

  • 请分享您的控制台输出(关于使用理智)(理智应用在哪里?)
  • 这要复杂得多,我们必须在具有复杂别名的 Linux 上工作(不是我们写的),因此分析别名并“手动”运行它不是一个好主意,我需要运行这个 ssh就像我在机器上有终端一样。

标签: python bash paramiko


【解决方案1】:

因为您正在通过 ssh 运行命令,所以您没有运行登录 shell,因此没有获取 .bashrc

在此处查看答案:https://superuser.com/questions/306530/run-remote-ssh-command-with-full-login-shell

编辑:

在调用exec_command时尝试设置get_pty=True

否则尝试强制登录 shell

exec_command('bash -l -c "sanity;"')

【讨论】:

  • 更无能为力的原因是解决方案:),可以告诉我我应该如何在 python 中像做腻子一样做到这一点?
  • 解决方案在我提供的链接中
  • 哪一个? - 我建议 2. 如果两者都不是,那么 superuser.com 链接中建议的其他解决方案怎么样?
【解决方案2】:

来自bash 手册页:

当 shell 不是交互式时,别名不会展开,除非使用 shopt 设置了 expand_aliases shell 选项

所以如果你想使用别名,你必须先设置expand_aliases 选项。

【讨论】:

最近更新 更多