Я пытаюсь создать экземпляр aws с помощью jclouds 1.9.0
, а затем запустить скрипт на нем (через ssh). Я следую примеру найти here, но я получаю ошибки аутентификации при попытке подключения клиента (java-программы) к экземпляру. Консоль AWS показывает, что экземпляр запущен и запущен.Установка учетных данных пользователя в aws-экземпляре с использованием jclouds
Пример пытается создать LoginCrendentials объект
String user = System.getProperty("user.name");
String privateKey = Files.toString(new File(System.getProperty("user.home") + "/.ssh/id_rsa"), UTF_8);
return LoginCredentials.builder().user(user).privateKey(privateKey).build();
который последний используется с SSH клиента
responses = compute.runScriptOnNodesMatching(
inGroup(groupName), // predicate used to select nodes
exec(command), // what you actually intend to run
overrideLoginCredentials(login) // use my local user & ssh key
.runAsRoot(false) // don't attempt to run as root (sudo)
.wrapInInitScript(false));
Некоторые данные для входа впрыскивают к экземпляру с помощью следующих команд
Statement bootInstructions = AdminAccess.standard();
templateBuilder.options(runScript(bootInstructions));
Поскольку я нахожусь на Windows-машине, создание LoginCrendent МОГВ «терпит неудачу» и, таким образом, я изменить свой код на
String user = "ec2-user";
String privateKey = "-----BEGIN RSA PRIVATE KEY-----.....-----END RSA PRIVATE KEY-----";
return LoginCredentials.builder().user(user).privateKey(privateKey).build();
Я также определить полномочия при построении шаблона, как описано в руководстве "EC2: In Depth", но не повезло.
Альтернатива заключается в том, чтобы создать экземпляр и ввести пару ключей следующим образом, но это означает, что мне нужно, чтобы ключ ssh хранился в моей AWS-консоли, чего в настоящее время нет, а также нарушает функциональность запуска скрипта (через ssh), так как я не могу сделать вывод NodeMetadata
с объекта RunningInstance
.
RunInstancesOptions options = RunInstancesOptions.Builder.asType("t2.micro").withKeyName(keypair).withSecurityGroup(securityGroup).withUserData(script.getBytes());
Любые предложения?
Примечание: Хотя я в настоящее время тестирую это на aws, я хочу, чтобы код был отделен от поставщика, насколько это возможно.
Update 26/10/2015
на основе @Ignasi Barrera answer, я изменил свою реализацию, добавив .init(new MyAdminAccessConfiguration())
при создании bootInstructions
Statement bootInstructions = AdminAccess.standard().init(new MyAdminAccessConfiguration());
templateBuilder.options(runScript(bootInstructions));
Где MyAdminAccessConfiguration
моя собственная реализация интерфейса AdminAccessConfiguration как @ Игнаси Баррера описал это.
Я получаю ошибку компиляции «AdminAccessConfiguration не может быть разрешен к переменной» в 'Bind (....', любые предложения или любые ресурсы вы можете указать мне в – Athafoud
Это был typo. В 'AdminAccessConfiguration' отсутствовал' .class'. Я уже редактировал сообщение. –