2

我正在尝试通过 SSH 连接到正在运行的 EC2 实例,但每次都会出现以下错误。

import os
import boto.manage.cmdshell

ec2 = boto.connect_ec2()
key_dir= '~/'
key_name='keypair'
key_extension='.pem'
key_path = os.path.join(os.path.expanduser(key_dir),
                    key_name+key_extension)
reservations = ec2.get_all_instances()
instance = reservations[0].instances[0]

cmd = boto.manage.cmdshell.sshclient_from_instance(instance,
                                               key_path,
                                               host_key_file='~/.ssh/known_hosts',
                                               user_name='ec2-user')

cmd.shell()

回溯(最后一次调用):文件“/home/.../FirstModule.py”,第 26 行,在 cmd.shell() 文件“/usr/lib/python2.7/dist-packages/boto/manage/ cmdshell.py”,第 114 行,在 shell interactive_shell(channel) 文件中“/usr/lib/python2.7/dist-packages/boto/mashups/interactive.py”,第 34 行,在 interactive_shell posix_shell(chan) 文件中“/ usr/lib/python2.7/dist-packages/boto/mashups/interactive.py”,第 42 行,在 posix_shell oldtty = termios.tcgetattr(sys.stdin) termios.error: (22, 'Invalid argument')

任何线索为什么会出现这个错误?

4

1 回答 1

1

一种可能性是主机文件的路径名不是原始字符串。这样做可能会有所帮助:

cmd = boto.manage.cmdshell.sshclient_from_instance(
          instance,
          key_path,
          host_key_file=r'~/.ssh/known_hosts',
          user_name='ec2-user'
       )

您可能还想引用该key_dir值。

key_dir = r'~/'
于 2012-11-13T17:28:32.727 回答