mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-06 05:25:50 +01:00
(refs #115)Add ShellFactory
This commit is contained in:
59
src/main/scala/ssh/NoShell.scala
Normal file
59
src/main/scala/ssh/NoShell.scala
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
package ssh
|
||||||
|
|
||||||
|
import org.apache.sshd.common.Factory
|
||||||
|
import org.apache.sshd.server.{Environment, ExitCallback, Command}
|
||||||
|
import java.io.{OutputStream, InputStream}
|
||||||
|
import org.eclipse.jgit.lib.Constants
|
||||||
|
|
||||||
|
class NoShell extends Factory[Command] {
|
||||||
|
override def create(): Command = new Command() {
|
||||||
|
private var in: InputStream = null
|
||||||
|
private var out: OutputStream = null
|
||||||
|
private var err: OutputStream = null
|
||||||
|
private var callback: ExitCallback = null
|
||||||
|
|
||||||
|
override def start(env: Environment): Unit = {
|
||||||
|
val message =
|
||||||
|
"""
|
||||||
|
| Welcome to
|
||||||
|
| _____ _ _ ____ _ _
|
||||||
|
| / ____| (_) | | | _ \ | | | |
|
||||||
|
| | | __ _ | |_ | |_) | _ _ ___ | | __ ___ | |_
|
||||||
|
| | | |_ | | | | __| | _ < | | | | / __| | |/ / / _ \ | __|
|
||||||
|
| | |__| | | | | |_ | |_) | | |_| | | (__ | < | __/ | |_
|
||||||
|
| \_____| |_| \__| |____/ \__,_| \___| |_|\_\ \___| \__|
|
||||||
|
|
|
||||||
|
| Successfully SSH Access.
|
||||||
|
| But interactive shell is disabled.
|
||||||
|
|
|
||||||
|
| Please use:
|
||||||
|
|
|
||||||
|
| git clone ssh://username@host_or_ip:29418/owner/repository_name.git
|
||||||
|
""".stripMargin.replace("\n", "\r\n") + "\r\n"
|
||||||
|
err.write(Constants.encode(message))
|
||||||
|
err.flush()
|
||||||
|
in.close()
|
||||||
|
out.close()
|
||||||
|
err.close()
|
||||||
|
callback.onExit(127)
|
||||||
|
}
|
||||||
|
|
||||||
|
override def destroy(): Unit = {}
|
||||||
|
|
||||||
|
override def setInputStream(in: InputStream): Unit = {
|
||||||
|
this.in = in
|
||||||
|
}
|
||||||
|
|
||||||
|
override def setOutputStream(out: OutputStream): Unit = {
|
||||||
|
this.out = out
|
||||||
|
}
|
||||||
|
|
||||||
|
override def setErrorStream(err: OutputStream): Unit = {
|
||||||
|
this.err = err
|
||||||
|
}
|
||||||
|
|
||||||
|
override def setExitCallback(callback: ExitCallback): Unit = {
|
||||||
|
this.callback = callback
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -10,13 +10,14 @@ import java.util.concurrent.atomic.AtomicBoolean
|
|||||||
object SshServer {
|
object SshServer {
|
||||||
private val logger = LoggerFactory.getLogger(SshServer.getClass)
|
private val logger = LoggerFactory.getLogger(SshServer.getClass)
|
||||||
private val server = org.apache.sshd.SshServer.setUpDefaultServer()
|
private val server = org.apache.sshd.SshServer.setUpDefaultServer()
|
||||||
private val active = new AtomicBoolean(false);
|
private val active = new AtomicBoolean(false)
|
||||||
|
|
||||||
private def configure(context: ServletContext, port: Int) = {
|
private def configure(context: ServletContext, port: Int) = {
|
||||||
server.setPort(port)
|
server.setPort(port)
|
||||||
server.setKeyPairProvider(new SimpleGeneratorHostKeyProvider(s"${Directory.GitBucketHome}/gitbucket.ser"))
|
server.setKeyPairProvider(new SimpleGeneratorHostKeyProvider(s"${Directory.GitBucketHome}/gitbucket.ser"))
|
||||||
server.setPublickeyAuthenticator(new PublicKeyAuthenticator(context))
|
server.setPublickeyAuthenticator(new PublicKeyAuthenticator(context))
|
||||||
server.setCommandFactory(new GitCommandFactory(context))
|
server.setCommandFactory(new GitCommandFactory(context))
|
||||||
|
server.setShellFactory(new NoShell)
|
||||||
}
|
}
|
||||||
|
|
||||||
def start(context: ServletContext, port: Int) = {
|
def start(context: ServletContext, port: Int) = {
|
||||||
|
|||||||
Reference in New Issue
Block a user