我想通过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()
答案 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
选项。