ssh通过paramiko加载.bashrc

时间:2015-08-21 12:05:51

标签: python bash paramiko

我想通过ssh(putty)自动执行相同的操作。 使用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()

2 个答案:

答案 0 :(得分:4)

因为您正在通过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;"')

答案 1 :(得分:2)

来自bash手册页:

  

如果shell不是交互式的,则不会展开别名,除非使用shopt设置了expand_aliases shell选项

因此,如果您想使用别名,则必须先设置expand_aliases选项。