mirror of https://github.com/apache/jclouds.git
Issue 79: ssh key support
git-svn-id: http://jclouds.googlecode.com/svn/trunk@2232 3d8758e0-26b5-11de-8745-db77d3ebf521
This commit is contained in:
parent
faf79d4fa3
commit
8fab264dd4
|
@ -184,8 +184,13 @@ public class GaeHttpCommandExecutorServiceTest {
|
|||
private void testHoot(HttpRequest request) throws IOException {
|
||||
request.getHeaders().put(HttpHeaders.CONTENT_TYPE, "text/plain");
|
||||
HTTPRequest gaeRequest = client.convert(request);
|
||||
assertEquals(gaeRequest.getHeaders().get(0).getName(), HttpHeaders.CONTENT_TYPE);
|
||||
assertEquals(gaeRequest.getHeaders().get(0).getValue(), "text/plain");
|
||||
try {
|
||||
assertEquals(gaeRequest.getHeaders().get(0).getName(), HttpHeaders.CONTENT_TYPE);
|
||||
assertEquals(gaeRequest.getHeaders().get(0).getValue(), "text/plain");
|
||||
} catch (AssertionError e) {
|
||||
assertEquals(gaeRequest.getHeaders().get(1).getName(), HttpHeaders.CONTENT_TYPE);
|
||||
assertEquals(gaeRequest.getHeaders().get(1).getValue(), "text/plain");
|
||||
}
|
||||
assertEquals(new String(gaeRequest.getPayload()), "hoot!");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -79,9 +79,12 @@ public class JschSshClient implements SshClient {
|
|||
private final int port;
|
||||
private final String username;
|
||||
private final String password;
|
||||
|
||||
@Resource
|
||||
protected Logger logger = Logger.NULL;
|
||||
private Session session;
|
||||
private final byte[] privateKey;
|
||||
final byte[] emptyPassPhrase = new byte[0];
|
||||
|
||||
@Inject
|
||||
public JschSshClient(InetSocketAddress socket, String username, String password) {
|
||||
|
@ -90,6 +93,17 @@ public class JschSshClient implements SshClient {
|
|||
this.port = socket.getPort();
|
||||
this.username = checkNotNull(username, "username");
|
||||
this.password = checkNotNull(password, "password");
|
||||
this.privateKey = null;
|
||||
}
|
||||
|
||||
@Inject
|
||||
public JschSshClient(InetSocketAddress socket, String username, byte[] privateKey) {
|
||||
this.host = checkNotNull(socket, "socket").getAddress();
|
||||
checkArgument(socket.getPort() > 0, "ssh port must be greater then zero" + socket.getPort());
|
||||
this.port = socket.getPort();
|
||||
this.username = checkNotNull(username, "username");
|
||||
this.password = null;
|
||||
this.privateKey = checkNotNull(privateKey, "privateKey");
|
||||
}
|
||||
|
||||
public InputStream get(String path) {
|
||||
|
@ -125,12 +139,16 @@ public class JschSshClient implements SshClient {
|
|||
session = null;
|
||||
try {
|
||||
session = jsch.getSession(username, host.getHostAddress(), port);
|
||||
logger.debug("%s@%s:%d: Session created.", username, host.getHostAddress(), port);
|
||||
if (password != null) {
|
||||
session.setPassword(password);
|
||||
} else {
|
||||
jsch.addIdentity(username, privateKey, null, emptyPassPhrase);
|
||||
}
|
||||
} catch (JSchException e) {
|
||||
throw new SshException(String.format("%s@%s:%d: Error creating session.", username, host
|
||||
.getHostAddress(), port), e);
|
||||
}
|
||||
logger.debug("%s@%s:%d: Session created.", username, host.getHostAddress(), port);
|
||||
session.setPassword(password);
|
||||
java.util.Properties config = new java.util.Properties();
|
||||
config.put("StrictHostKeyChecking", "no");
|
||||
session.setConfig(config);
|
||||
|
|
|
@ -49,5 +49,9 @@ public class JschSshClientModule extends AbstractModule {
|
|||
return new JschSshClient(socket, username, password);
|
||||
}
|
||||
|
||||
public SshClient create(InetSocketAddress socket, String username, byte[] privateKey) {
|
||||
return new JschSshClient(socket, username, privateKey);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -25,6 +25,8 @@ package org.jclouds.ssh.jsch;
|
|||
|
||||
import static org.testng.Assert.assertEquals;
|
||||
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.InetAddress;
|
||||
|
@ -53,14 +55,16 @@ public class JschSshClientLiveTest {
|
|||
protected static final String sshPort = System.getProperty("jclouds.test.ssh.port");
|
||||
protected static final String sshUser = System.getProperty("jclouds.test.ssh.username");
|
||||
protected static final String sshPass = System.getProperty("jclouds.test.ssh.password");
|
||||
protected static final String sshKeyFile = System.getProperty("jclouds.test.ssh.keyfile");
|
||||
|
||||
@BeforeGroups(groups = { "live" })
|
||||
public SshClient setupClient() throws NumberFormatException, UnknownHostException {
|
||||
public SshClient setupClient() throws NumberFormatException, FileNotFoundException, IOException {
|
||||
int port = (sshPort != null) ? Integer.parseInt(sshPort) : 22;
|
||||
InetAddress host = (sshHost != null) ? InetAddress.getByName(sshHost) : InetAddress
|
||||
.getLocalHost();
|
||||
if (sshUser == null || sshPass == null || sshUser.trim().equals("")
|
||||
|| sshPass.trim().equals("")) {
|
||||
if (sshUser == null
|
||||
|| ((sshPass == null || sshPass.trim().equals("")) && (sshKeyFile == null || sshKeyFile
|
||||
.trim().equals(""))) || sshUser.trim().equals("")) {
|
||||
System.err.println("ssh credentials not present. Tests will be lame");
|
||||
return new SshClient() {
|
||||
|
||||
|
@ -92,7 +96,13 @@ public class JschSshClientLiveTest {
|
|||
} else {
|
||||
Injector i = Guice.createInjector(new JschSshClientModule());
|
||||
SshClient.Factory factory = i.getInstance(SshClient.Factory.class);
|
||||
SshClient connection = factory.create(new InetSocketAddress(host, port), sshUser, sshPass);
|
||||
SshClient connection;
|
||||
if (sshKeyFile != null && !sshKeyFile.trim().equals("")) {
|
||||
connection = factory.create(new InetSocketAddress(host, port), sshUser, Utils
|
||||
.toStringAndClose(new FileInputStream(sshKeyFile)).getBytes());
|
||||
} else {
|
||||
connection = factory.create(new InetSocketAddress(host, port), sshUser, sshPass);
|
||||
}
|
||||
connection.connect();
|
||||
return connection;
|
||||
}
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
<jclouds.test.ssh.port>22</jclouds.test.ssh.port>
|
||||
<jclouds.test.ssh.username />
|
||||
<jclouds.test.ssh.password />
|
||||
<jclouds.test.ssh.keyfile />
|
||||
</properties>
|
||||
<profiles>
|
||||
<profile>
|
||||
|
@ -89,6 +90,10 @@
|
|||
<name>jclouds.test.ssh.username</name>
|
||||
<value>${jclouds.test.ssh.username}</value>
|
||||
</property>
|
||||
<property>
|
||||
<name>jclouds.test.ssh.keyfile</name>
|
||||
<value>${jclouds.test.ssh.keyfile}</value>
|
||||
</property>
|
||||
<property>
|
||||
<name>jclouds.test.ssh.password</name>
|
||||
<value>${jclouds.test.ssh.password}</value>
|
||||
|
|
Loading…
Reference in New Issue