mirror of https://github.com/apache/jclouds.git
Issue 719: added some logging for ssh fingerprints
This commit is contained in:
parent
a1d1f0131f
commit
c28a2e38c3
|
@ -67,7 +67,7 @@ public class CreateUniqueKeyPair extends CacheLoader<RegionAndName, KeyPair> {
|
||||||
while (keyPair == null) {
|
while (keyPair == null) {
|
||||||
try {
|
try {
|
||||||
keyPair = ec2Client.getKeyPairServices().createKeyPairInRegion(region, getNextName(region, group));
|
keyPair = ec2Client.getKeyPairServices().createKeyPairInRegion(region, getNextName(region, group));
|
||||||
logger.debug("<< created keyPair(%s)", keyPair.getKeyName());
|
logger.debug("<< created keyPair(%s) fingerprint(%s)", keyPair.getKeyName(), keyPair.getKeyFingerprint());
|
||||||
} catch (IllegalStateException e) {
|
} catch (IllegalStateException e) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,9 +25,11 @@ import static com.google.common.base.Predicates.instanceOf;
|
||||||
import static com.google.common.base.Predicates.or;
|
import static com.google.common.base.Predicates.or;
|
||||||
import static com.google.common.base.Throwables.getCausalChain;
|
import static com.google.common.base.Throwables.getCausalChain;
|
||||||
import static com.google.common.collect.Iterables.any;
|
import static com.google.common.collect.Iterables.any;
|
||||||
|
import static org.jclouds.crypto.SshKeys.fingerprint;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
import java.security.spec.RSAPrivateCrtKeySpec;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import javax.annotation.PostConstruct;
|
import javax.annotation.PostConstruct;
|
||||||
|
@ -48,6 +50,7 @@ import net.schmizz.sshj.xfer.InMemorySourceFile;
|
||||||
|
|
||||||
import org.apache.commons.io.input.ProxyInputStream;
|
import org.apache.commons.io.input.ProxyInputStream;
|
||||||
import org.jclouds.compute.domain.ExecResponse;
|
import org.jclouds.compute.domain.ExecResponse;
|
||||||
|
import org.jclouds.crypto.Pems;
|
||||||
import org.jclouds.http.handlers.BackoffLimitedRetryHandler;
|
import org.jclouds.http.handlers.BackoffLimitedRetryHandler;
|
||||||
import org.jclouds.io.Payload;
|
import org.jclouds.io.Payload;
|
||||||
import org.jclouds.io.Payloads;
|
import org.jclouds.io.Payloads;
|
||||||
|
@ -92,7 +95,8 @@ public class SshjSshClient implements SshClient {
|
||||||
private final int port;
|
private final int port;
|
||||||
private final String username;
|
private final String username;
|
||||||
private final String password;
|
private final String password;
|
||||||
|
private final String toString;
|
||||||
|
|
||||||
@Inject(optional = true)
|
@Inject(optional = true)
|
||||||
@Named("jclouds.ssh.max-retries")
|
@Named("jclouds.ssh.max-retries")
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
|
@ -135,6 +139,13 @@ public class SshjSshClient implements SshClient {
|
||||||
this.timeoutMillis = timeout;
|
this.timeoutMillis = timeout;
|
||||||
this.password = password;
|
this.password = password;
|
||||||
this.privateKey = privateKey;
|
this.privateKey = privateKey;
|
||||||
|
if (privateKey == null) {
|
||||||
|
this.toString = String.format("%s@%s:%d", username, host, port);
|
||||||
|
} else {
|
||||||
|
RSAPrivateCrtKeySpec key = (RSAPrivateCrtKeySpec) Pems.privateKeySpec(new String(privateKey));
|
||||||
|
String fingerPrint = fingerprint(key.getPublicExponent(), key.getModulus());
|
||||||
|
this.toString = String.format("%s:[%s]@%s:%d", username, fingerPrint, host, port);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -391,7 +402,7 @@ public class SshjSshClient implements SshClient {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return String.format("%s@%s:%d", username, host, port);
|
return toString ;
|
||||||
}
|
}
|
||||||
|
|
||||||
@PreDestroy
|
@PreDestroy
|
||||||
|
|
|
@ -69,12 +69,12 @@ public class ImportOrReturnExistingKeypair implements Function<RegionNameAndPubl
|
||||||
try {
|
try {
|
||||||
keyPair = ec2Client.getKeyPairServices().importKeyPairInRegion(region, "jclouds#" + group,
|
keyPair = ec2Client.getKeyPairServices().importKeyPairInRegion(region, "jclouds#" + group,
|
||||||
publicKeyMaterial);
|
publicKeyMaterial);
|
||||||
logger.debug("<< imported keyPair(%s)", keyPair.getKeyName());
|
logger.debug("<< imported keyPair(%s) fingerprint(%s)", keyPair.getKeyName(), keyPair.getKeyFingerprint());
|
||||||
} catch (IllegalStateException e) {
|
} catch (IllegalStateException e) {
|
||||||
keyPair = Iterables.getFirst(
|
keyPair = Iterables.getFirst(
|
||||||
ec2Client.getKeyPairServices().describeKeyPairsInRegion(region, "jclouds#" + group), null);
|
ec2Client.getKeyPairServices().describeKeyPairsInRegion(region, "jclouds#" + group), null);
|
||||||
if (keyPair != null)
|
if (keyPair != null)
|
||||||
logger.debug("<< retrieved existing keyPair(%s)", keyPair.getKeyName());
|
logger.debug("<< retrieved existing keyPair(%s) fingerprint(%s)", keyPair.getKeyName(), keyPair.getKeyFingerprint());
|
||||||
}
|
}
|
||||||
return keyPair;
|
return keyPair;
|
||||||
}
|
}
|
||||||
|
|
|
@ -130,13 +130,13 @@ public class AWSKeyPairClientLiveTest {
|
||||||
Set<? extends NodeMetadata> nodes = noSshContext.getComputeService().createNodesInGroup(group, 1, options);
|
Set<? extends NodeMetadata> nodes = noSshContext.getComputeService().createNodesInGroup(group, 1, options);
|
||||||
|
|
||||||
NodeMetadata first = get(nodes, 0);
|
NodeMetadata first = get(nodes, 0);
|
||||||
|
// credentials should be present as this is the default user from the image
|
||||||
assert first.getCredentials() != null : first;
|
assert first.getCredentials() != null : first;
|
||||||
assert first.getCredentials().identity != null : first;
|
assert first.getCredentials().identity != null : first;
|
||||||
assert first.getCredentials().credential == null : first;
|
assert first.getCredentials().credential != null : first;
|
||||||
|
|
||||||
AWSRunningInstance instance = getInstance(instanceClient, first.getProviderId());
|
AWSRunningInstance instance = getInstance(instanceClient, first.getProviderId());
|
||||||
|
|
||||||
assert instance.getSpotInstanceRequestId() != null : instance;
|
|
||||||
assertEquals(instance.getKeyName(), "jclouds#" + group);
|
assertEquals(instance.getKeyName(), "jclouds#" + group);
|
||||||
|
|
||||||
Map<? extends NodeMetadata, ExecResponse> responses = computeContext.getComputeService()
|
Map<? extends NodeMetadata, ExecResponse> responses = computeContext.getComputeService()
|
||||||
|
|
Loading…
Reference in New Issue