Java源码示例:io.termd.core.ssh.TtyCommand
示例1
public void start(final Consumer<TtyConnection> factory, Consumer<Throwable> doneHandler) {
server = SshServer.setUpDefaultServer();
server.setIoServiceFactoryFactory(new NettyIoServiceFactoryFactory(childGroup));
server.setPort(port);
server.setHost(host);
server.setKeyPairProvider(keyPairProvider);
server.setPasswordAuthenticator(passwordAuthenticator);
server.setShellFactory(new Factory<Command>() {
@Override
public Command create() {
return new TtyCommand(charset, factory);
}
});
try {
server.start();
} catch (Exception e) {
doneHandler.accept(e);
return;
}
doneHandler.accept(null);
}
示例2
public void start(Consumer<TtyConnection> factory, Consumer<Throwable> doneHandler) {
server = SshServer.setUpDefaultServer();
server.setIoServiceFactoryFactory(new NettyIoServiceFactoryFactory(childGroup));
server.setPort(port);
server.setHost(host);
server.setKeyPairProvider(keyPairProvider);
server.setPasswordAuthenticator(passwordAuthenticator);
server.setShellFactory(() -> new TtyCommand(charset, factory));
try {
server.start();
} catch (Exception e) {
doneHandler.accept(e);
return;
}
doneHandler.accept(null);
}
示例3
@Override
protected TtyCommand createConnection(Consumer<TtyConnection> onConnect) {
return new TtyCommand(charset, onConnect) {
@Override
public void execute(Runnable task) {
Session session = this.session.getSession();
NettyIoSession ioSession = (NettyIoSession) session.getIoSession();
ioSession.execute(task);
}
};
}
示例4
@Override
protected TtyCommand createConnection(Consumer<TtyConnection> onConnect) {
return new TtyCommand(charset, onConnect) {
@Override
public void execute(Runnable task) {
Session session = this.session.getSession();
NettyIoSession ioSession = (NettyIoSession) session.getIoSession();
ioSession.execute(task);
}
};
}
示例5
protected TtyCommand createConnection(Consumer<TtyConnection> onConnect) {
return new TtyCommand(charset, onConnect);
}
示例6
public SSHServer listen(Handler<AsyncResult<Void>> listenHandler) {
if (!status.compareAndSet(STATUS_STOPPED, STATUS_STARTING)) {
listenHandler.handle(Future.failedFuture("Invalid state:" + status.get()));
return this;
}
if (options.getAuthOptions() != null) {
authProvider = ShellAuth.load(vertx, options.getAuthOptions());
}
Charset defaultCharset = Charset.forName(options.getDefaultCharset());
listenContext = (ContextInternal) vertx.getOrCreateContext();
vertx.executeBlocking(fut -> {
try {
KeyCertOptions ksOptions = options.getKeyPairOptions();
KeyStoreHelper ksHelper = KeyStoreHelper.create((VertxInternal) vertx, ksOptions);
if (ksHelper == null) {
throw new VertxException("No key pair store configured");
}
KeyStore ks = ksHelper.store();
String kpPassword = "";
if (ksOptions instanceof JksOptions) {
kpPassword = ((JksOptions) ksOptions).getPassword();
} else if (ksOptions instanceof PfxOptions) {
kpPassword = ((PfxOptions) ksOptions).getPassword();
}
List<KeyPair> keyPairs = new ArrayList<>();
for (Enumeration<String> it = ks.aliases(); it.hasMoreElements(); ) {
String alias = it.nextElement();
Key key = ks.getKey(alias, kpPassword.toCharArray());
if (key instanceof PrivateKey) {
Certificate cert = ks.getCertificate(alias);
PublicKey publicKey = cert.getPublicKey();
keyPairs.add(new KeyPair(publicKey, (PrivateKey) key));
}
}
KeyPairProvider provider = new AbstractKeyPairProvider() {
@Override
public Iterable<KeyPair> loadKeys() {
return keyPairs;
}
};
Buffer inputrc = Helper.loadResource(vertx.fileSystem(), options.getIntputrc());
if (inputrc == null) {
throw new VertxException("Could not load inputrc from " + options.getIntputrc());
}
Keymap keymap = new Keymap(new ByteArrayInputStream(inputrc.getBytes()));
TermConnectionHandler connectionHandler = new TermConnectionHandler(vertx, keymap, termHandler);
nativeServer = SshServer.setUpDefaultServer();
nativeServer.setShellFactory(() -> new TtyCommand(defaultCharset, connectionHandler::handle));
Handler<SSHExec> execHandler = this.execHandler;
if (execHandler != null) {
nativeServer.setCommandFactory(command -> new TtyCommand(defaultCharset, conn -> {
execHandler.handle(new SSHExec(command, conn));
}));
}
nativeServer.setHost(options.getHost());
nativeServer.setPort(options.getPort());
nativeServer.setKeyPairProvider(provider);
nativeServer.setIoServiceFactoryFactory(new NettyIoServiceFactoryFactory(listenContext.nettyEventLoop(), new VertxIoHandlerBridge(listenContext)));
nativeServer.setServiceFactories(Arrays.asList(ServerConnectionServiceFactory.INSTANCE, AsyncUserAuthServiceFactory.INSTANCE));
//
if (authProvider == null) {
throw new VertxException("No authenticator");
}
nativeServer.setPasswordAuthenticator((username, userpass, session) -> {
AsyncAuth auth = new AsyncAuth();
listenContext.runOnContext(v -> {
authProvider.authenticate(new JsonObject().put("username", username).put("password", userpass), ar -> {
auth.setAuthed(ar.succeeded());
});
});
throw auth;
});
//
nativeServer.start();
status.set(STATUS_STARTED);
fut.complete();
} catch (Exception e) {
status.set(STATUS_STOPPED);
fut.fail(e);
}
}, listenHandler);
return this;
}
示例7
protected TtyCommand createConnection(Consumer<TtyConnection> onConnect) {
return new TtyCommand(charset, onConnect);
}