private def userauthPassword(transportManager: TransportManager, user: String, pass: String) { // SSH_MSG_SERVICE_REQUEST で "ssh-userauth" サービスをクライアントからサーバに要求する transportManager.sendMessage(TransportMessageBuilder.buildServiceRequest("ssh-userauth")) // SSH_MSG_SERVICE_ACCEPT を受信する val serviceRequestResult = transportManager.recvMessage().asInstanceOf[ServiceAccept] // SSH_MSG_USERAUTH_REQUEST で "password" 認証を要求する transportManager.sendMessage(UserauthMessageBuilder.buildUserauthRequestPassword(user, pass)) // SSH_MSG_USERAUTH_SUCCESS か SSH_MSG_USERAUTH_FAILURE を受信する val userauthResult = transportManager.recvMessage() userauthResult match { case success: UserauthSuccess => case UserauthFailure(id, authentications, partialSuccess) => println("Userauth failed") println(authentications) throw new RuntimeException("Uearauth failed") } }
byte SSH_MSG_SERVICE_REQUEST string service name
byte SSH_MSG_SERVICE_ACCEPT string service name
byte SSH_MSG_USERAUTH_REQUEST string user name string service name string "password" boolean FALSE string plaintext password in ISO-10646 UTF-8 encoding [RFC3629]
byte SSH_MSG_USERAUTH_SUCCESS
byte SSH_MSG_USERAUTH_FAILURE name-list authentications that can continue boolean partial success
> run localhost 22 test wrong_password ls ... Userauth failed SSHNameList(WrappedArray(publickey, password)) ...