Java Examples for org.apache.sshd.common.Channel
The following java examples will help you to understand the usage of org.apache.sshd.common.Channel. These source code samples are taken from different open source projects.
Example 1
| Project: mina-sshd-master File: SshClient.java View source code |
@Override
protected void checkConfig() {
super.checkConfig();
Objects.requireNonNull(getTcpipForwarderFactory(), "TcpipForwarderFactory not set");
Objects.requireNonNull(getServerKeyVerifier(), "ServerKeyVerifier not set");
Objects.requireNonNull(getHostConfigEntryResolver(), "HostConfigEntryResolver not set");
Objects.requireNonNull(getClientIdentityLoader(), "ClientIdentityLoader not set");
Objects.requireNonNull(getFilePasswordProvider(), "FilePasswordProvider not set");
// if no client identities override use the default
KeyPairProvider defaultIdentities = getKeyPairProvider();
if (defaultIdentities == null) {
setKeyPairProvider(new DefaultClientIdentitiesWatcher(this::getClientIdentityLoader, this::getFilePasswordProvider));
}
// Register the additional agent forwarding channel if needed
SshAgentFactory agentFactory = getAgentFactory();
if (agentFactory != null) {
List<NamedFactory<Channel>> forwarders = ValidateUtils.checkNotNullAndNotEmpty(agentFactory.getChannelForwardingFactories(this), "No agent channel forwarding factories for %s", agentFactory);
List<NamedFactory<Channel>> factories = getChannelFactories();
if (GenericUtils.isEmpty(factories)) {
factories = forwarders;
} else {
// create a copy in case un-modifiable original
List<NamedFactory<Channel>> factories2 = new ArrayList<>(factories.size() + forwarders.size());
factories2.addAll(factories);
factories2.addAll(forwarders);
factories = factories2;
}
setChannelFactories(factories);
}
if (GenericUtils.isEmpty(getServiceFactories())) {
setServiceFactories(DEFAULT_SERVICE_FACTORIES);
}
if (GenericUtils.isEmpty(getUserAuthFactories())) {
setUserAuthFactories(DEFAULT_USER_AUTH_FACTORIES);
}
}Example 2
| Project: termd-master File: KeepAliveTest.java View source code |
@Test
public void testIdleClient() throws Exception {
SshClient client = setupTestClient();
client.start();
try (ClientSession session = client.connect(getCurrentTestName(), TEST_LOCALHOST, port).verify(7L, TimeUnit.SECONDS).getSession()) {
session.addPasswordIdentity(getCurrentTestName());
session.auth().verify(5L, TimeUnit.SECONDS);
try (ClientChannel channel = session.createChannel(Channel.CHANNEL_SHELL)) {
Collection<ClientChannelEvent> result = channel.waitFor(EnumSet.of(ClientChannelEvent.CLOSED), WAIT);
assertTrue("Wrong channel state: " + result, result.containsAll(EnumSet.of(ClientChannelEvent.CLOSED)));
}
} finally {
client.stop();
}
}Example 3
| Project: cloud-master File: EmbeddedSshd.java View source code |
public boolean start() throws IOException {
if (sshd != null) {
throw new IllegalStateException();
}
final boolean authUseKeys = true;
// TODO: Use AuthorizedSshKeys helper
final File authorizedKeys = configuration.lookupFile("sshd.authorized_keys", "~/.ssh/authorized_fathomcloud");
if (!authUseKeys) {
throw new IllegalArgumentException("Neither password nor publickey SSH-auth are enabled, so won't start SSH server");
}
sshd = SshServer.setUpDefaultServer();
if (authUseKeys) {
sshd.setPublickeyAuthenticator(new PublickeyAuthenticator() {
@Override
public boolean authenticate(String username, PublicKey key, ServerSession session) {
try {
String opensshEncoded = OpenSshUtils.serialize(key);
log.info("SSH presented public key: " + opensshEncoded);
List<String> match = Lists.newArrayList(Splitter.on(CharMatcher.WHITESPACE).split(opensshEncoded));
if (!authorizedKeys.exists()) {
log.warn("SSH authorized key file does not exist: {}", authorizedKeys);
} else {
for (String line : Files.readLines(authorizedKeys, Charsets.UTF_8)) {
line = line.trim();
List<String> tokens = Lists.newArrayList(Splitter.on(CharMatcher.WHITESPACE).split(line));
if (tokens.size() < 2) {
continue;
}
if (!match.get(0).equals(tokens.get(0))) {
continue;
}
if (!match.get(1).equals(tokens.get(1))) {
continue;
}
return true;
}
}
return false;
} catch (Exception e) {
log.error("Exception while verifying public key", e);
return false;
}
}
});
}
// Log if anyone even suggests touching the filesystem
sshd.setFileSystemFactory(new FileSystemFactory() {
@Override
public FileSystemView createFileSystemView(Session session) throws IOException {
log.warn("Blocking SSHD filesystem access");
throw new IllegalStateException("Blocking SSHD filesystem access");
}
});
// Log if anyone even suggested forwarding a port
sshd.setForwardingFilter(new ForwardingFilter() {
@Override
public boolean canListen(InetSocketAddress address, ServerSession session) {
log.warn("Blocking SSHD port forwarding");
return false;
}
@Override
public boolean canForwardX11(ServerSession session) {
log.warn("Blocking SSHD port forwarding");
return false;
}
@Override
public boolean canForwardAgent(ServerSession session) {
log.warn("Blocking SSHD port forwarding");
return false;
}
@Override
public boolean canConnect(InetSocketAddress address, ServerSession session) {
log.warn("Blocking SSHD port forwarding");
return false;
}
});
sshd.setAgentFactory(new SshAgentFactory() {
@Override
public NamedFactory<Channel> getChannelForwardingFactory() {
log.warn("Blocking SSHD agent functionality");
throw new IllegalStateException("Blocking SSHD agent functionality");
}
@Override
public SshAgentServer createServer(Session session) throws IOException {
log.warn("Blocking SSHD agent functionality");
throw new IllegalStateException("Blocking SSHD agent functionality");
}
@Override
public SshAgent createClient(Session session) throws IOException {
log.warn("Blocking SSHD agent functionality");
throw new IllegalStateException("Blocking SSHD agent functionality");
}
});
sshd.setTcpipForwardNioSocketAcceptorFactory(new ForwardingAcceptorFactory() {
@Override
public NioSocketAcceptor createNioSocketAcceptor(Session session) {
log.warn("Blocking SSHD Tcpip Forward functionality");
throw new IllegalStateException("Blocking SSHD Tcpip Forward access");
}
});
sshd.setX11ForwardNioSocketAcceptorFactory(new ForwardingAcceptorFactory() {
@Override
public NioSocketAcceptor createNioSocketAcceptor(Session session) {
log.warn("Blocking SSHD X11 Forward functionality");
throw new IllegalStateException("Blocking SSHD X11 Forward access");
}
});
sshd.setShellFactory(new Factory<Command>() {
@Override
public Command create() {
log.warn("Blocking SSHD shell functionality");
throw new IllegalStateException("Blocking SSHD shell access");
}
});
sshd.setPort(configuration.lookup("sshd.port", 2222));
File hostkeyPath = configuration.lookupFile("sshd.hostkey", "hostkey.ser");
sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider(hostkeyPath.getAbsolutePath()));
sshd.setCommandFactory(sshCommandFactory);
List<NamedFactory<Command>> subsystemFactories = sshd.getSubsystemFactories();
if (subsystemFactories != null) {
throw new UnsupportedOperationException();
}
List<NamedFactory<Channel>> channelFactories = sshd.getChannelFactories();
sshd.setChannelFactories(Lists.newArrayList(Iterables.filter(channelFactories, new Predicate<NamedFactory<Channel>>() {
@Override
public boolean apply(NamedFactory<Channel> command) {
if (command instanceof ChannelSession.Factory) {
log.info("Accepting Channel factory: " + command);
return true;
} else {
return false;
}
}
})));
log.info("Starting SSH server");
sshd.start();
for (NamedFactory<UserAuth> authFactory : sshd.getUserAuthFactories()) {
if (authFactory instanceof UserAuthPublicKey.Factory) {
if (!authUseKeys) {
throw new IllegalStateException();
}
} else {
throw new IllegalStateException();
}
}
return true;
}Example 4
| Project: podd-redesign-master File: SSHService.java View source code |
public static SshServer getTestServer() {
final SshServer sshd = new SshServer();
// DHG14 uses 2048 bits key which are not supported by the default JCE provider
// if (SecurityUtils.isBouncyCastleRegistered()) {
// sshd.setKeyExchangeFactories(Arrays.<NamedFactory<KeyExchange>>asList(
// new DHG14.Factory(),
// new DHG1.Factory()));
// sshd.setRandomFactory(new SingletonRandomFactory(new BouncyCastleRandom.Factory()));
// } else {
sshd.setKeyExchangeFactories(Arrays.<NamedFactory<KeyExchange>>asList(new DHG1.Factory()));
sshd.setRandomFactory(new SingletonRandomFactory(new JceRandom.Factory()));
// }
SSHService.setUpDefaultCiphers(sshd);
// Compression is not enabled by default
// sshd.setCompressionFactories(Arrays.<NamedFactory<Compression>>asList(
// new CompressionNone.Factory(),
// new CompressionZlib.Factory(),
// new CompressionDelayedZlib.Factory()));
sshd.setCompressionFactories(Arrays.<NamedFactory<Compression>>asList(new CompressionNone.Factory()));
sshd.setMacFactories(Arrays.<NamedFactory<Mac>>asList(new HMACMD5.Factory(), new HMACSHA1.Factory(), new HMACMD596.Factory(), new HMACSHA196.Factory()));
sshd.setChannelFactories(Arrays.<NamedFactory<Channel>>asList(new ChannelSession.Factory(), new ChannelDirectTcpip.Factory()));
sshd.setSignatureFactories(Arrays.<NamedFactory<Signature>>asList(new SignatureDSA.Factory(), new SignatureRSA.Factory()));
sshd.setFileSystemFactory(new NativeFileSystemFactory());
final ForwardingAcceptorFactory faf = new DefaultForwardingAcceptorFactory();
sshd.setTcpipForwardNioSocketAcceptorFactory(faf);
sshd.setX11ForwardNioSocketAcceptorFactory(faf);
return sshd;
}Example 5
| Project: sft-master File: Server.java View source code |
@SuppressWarnings("unchecked")
protected void setupFactories() {
sshd.setSubsystemFactories(Arrays.<NamedFactory<Command>>asList(new CustomSftpSubsystemFactory()));
sshd.setMacFactories(//
Arrays.<//
NamedFactory<Mac>>asList(BuiltinMacs//
.hmacsha512, BuiltinMacs//
.hmacsha256, BuiltinMacs.hmacsha1));
sshd.setChannelFactories(Arrays.<NamedFactory<Channel>>asList(ChannelSessionFactory.INSTANCE));
}Example 6
| Project: Asynchronous-SSHD-master File: ServerSession.java View source code |
private void channelOpen(Buffer buffer) throws Exception {
String type = buffer.getString();
final int id = buffer.getInt();
final int rwsize = buffer.getInt();
final int rmpsize = buffer.getInt();
LogUtils.info(log, "Received SSH_MSG_CHANNEL_OPEN {0}", type);
if (closing) {
Buffer buf = createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_OPEN_FAILURE, 0);
buf.putInt(id);
buf.putInt(SshConstants.SSH_OPEN_CONNECT_FAILED);
buf.putString("SSH server is shutting down: " + type);
buf.putString("");
writePacket(buf);
return;
}
if (!allowMoreSessions) {
Buffer buf = createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_OPEN_FAILURE, 0);
buf.putInt(id);
buf.putInt(SshConstants.SSH_OPEN_CONNECT_FAILED);
buf.putString("additional sessions disabled");
buf.putString("");
writePacket(buf);
return;
}
final Channel channel = NamedFactory.Utils.create(getServerFactoryManager().getChannelFactories(), type);
if (channel == null) {
Buffer buf = createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_OPEN_FAILURE, 0);
buf.putInt(id);
buf.putInt(SshConstants.SSH_OPEN_UNKNOWN_CHANNEL_TYPE);
buf.putString("Unsupported channel type: " + type);
buf.putString("");
writePacket(buf);
return;
}
final int channelId = getNextChannelId();
channels.put(channelId, channel);
channel.init(this, channelId);
channel.open(id, rwsize, rmpsize, buffer).addListener(new SshFutureListener<OpenFuture>() {
public void operationComplete(OpenFuture future) {
try {
if (future.isOpened()) {
Buffer buf = createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_OPEN_CONFIRMATION, 0);
buf.putInt(id);
buf.putInt(channelId);
buf.putInt(channel.getLocalWindow().getSize());
buf.putInt(channel.getLocalWindow().getPacketSize());
writePacket(buf);
} else if (future.getException() != null) {
Buffer buf = createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_OPEN_FAILURE, 0);
buf.putInt(id);
if (future.getException() instanceof OpenChannelException) {
buf.putInt(((OpenChannelException) future.getException()).getReasonCode());
buf.putString(future.getException().getMessage());
} else {
buf.putInt(0);
buf.putString("Error opening channel: " + future.getException().getMessage());
}
buf.putString("");
writePacket(buf);
}
} catch (IOException e) {
exceptionCaught(e);
}
}
});
}Example 7
| Project: scumd-master File: AbstractSession.java View source code |
/**
* Close this session.
* This method will close all channels, then close the underlying MINA session.
* The call will not block until the mina session is actually closed.
*/
public CloseFuture close(final boolean immediately) {
class IoSessionCloser implements IoFutureListener {
public void operationComplete(IoFuture future) {
synchronized (lock) {
log.debug("IoSession closed");
closeFuture.setClosed();
lock.notifyAll();
}
}
}
;
synchronized (lock) {
if (!closing) {
try {
closing = true;
log.info("Closing session");
Channel[] channelToClose = channels.values().toArray(new Channel[0]);
if (channelToClose.length > 0) {
final AtomicInteger latch = new AtomicInteger(channelToClose.length);
for (Channel channel : channelToClose) {
log.debug("Closing channel {}", channel.getId());
channel.close(immediately).addListener(new SshFutureListener() {
public void operationComplete(SshFuture sshFuture) {
if (latch.decrementAndGet() == 0) {
log.debug("Closing IoSession");
ioSession.close(true).addListener(new IoSessionCloser());
}
}
});
}
} else {
log.debug("Closing IoSession");
ioSession.close(immediately).addListener(new IoSessionCloser());
}
} catch (Throwable t) {
log.warn("Error closing session", t);
}
}
return closeFuture;
}
}Example 8
| Project: karaf-master File: KarafAgentFactory.java View source code |
@Override
public List<NamedFactory<Channel>> getChannelForwardingFactories(FactoryManager factoryManager) {
return LocalAgentFactory.DEFAULT_FORWARDING_CHANNELS;
}Example 9
| Project: tools_gerrit-master File: SshDaemon.java View source code |
@SuppressWarnings("unchecked")
private void initChannels() {
setChannelFactories(Arrays.<NamedFactory<Channel>>asList(//
new ChannelSession.Factory(), //
new ChannelDirectTcpip.Factory()));
}