Class: LibSSH::Session
- Inherits:
-
Object
- Object
- LibSSH::Session
- Defined in:
- ext/libssh_ruby/session.c,
ext/libssh_ruby/session.c
Overview
Wrapper for ssh_session struct in libssh.
Instance Method Summary collapse
-
#add_identity(path_format) ⇒ nil
Add the identity file name format.
-
#bindaddr=(addr) ⇒ nil
Set the address to bind the client to.
-
#compression=(algorithm) ⇒ nil
Set the compression to use for both directions communication.
-
#compression_level=(level) ⇒ nil
Set the compression level to use for zlib functions.
-
#connect ⇒ nil
Connect to the SSH server.
-
#disconnect ⇒ nil
Disconnect from a session.
-
#fd ⇒ Fixnum
Get the fd of a connection.
-
#get_publickey ⇒ Key
Get the server public key from a session.
-
#gssapi_client_identity=(identity) ⇒ nil
Set the GSSAPI client identity that libssh should expect when connecting to the server.
-
#gssapi_delegate_credentials=(enable) ⇒ nil
Set whether GSSAPI should delegate credentials to the server.
-
#gssapi_server_identity=(identity) ⇒ nil
Set the GSSAPI server identity that libssh should expect when connecting to the server.
-
#host=(host) ⇒ nil
Set the hostname or IP address to connect to.
-
#hostkeys=(key_types) ⇒ nil
Set the preferred server host key types.
-
#initialize ⇒ Object
constructor
Create a new SSH session.
-
#key_exchange=(methods) ⇒ nil
Set the key exchange method to be used.
-
#knownhosts=(path) ⇒ nil
Set the known hosts file name.
-
#log_verbosity=(verbosity) ⇒ nil
Set the session logging verbosity.
-
#parse_config(path = nil) ⇒ Boolean
Parse the ssh_config file.
-
#port=(port) ⇒ nil
Set the port to connect to.
-
#protocol=(protocol) ⇒ nil
Set allowed SSH protocols.
-
#proxycommand=(command) ⇒ nil
Set the command to be executed in order to connect to server.
-
#server_known ⇒ Fixnum
Check if the server is knonw.
-
#stricthostkeycheck=(enable) ⇒ nil
Set the parameter StrictHostKeyChecking to avoid asking about a fingerprint.
-
#timeout=(sec) ⇒ nil
Set a timeout for the connection in seconds.
-
#timeout_usec=(usec) ⇒ nil
Set a timeout for the connection in micro seconds.
-
#user=(user) ⇒ nil
Set the username for authentication.
-
#userauth_list ⇒ Array<Symbol>
Get available authentication methods from the server.
-
#userauth_none ⇒ Fixnum
Try to authenticate through then “none” method.
-
#userauth_publickey_auto ⇒ Fixnum
Try to automatically authenticate with public key and “none”.
-
#write_knownhost ⇒ nil
Write the current server as known in the known_hosts file.
Constructor Details
#initialize ⇒ Object
Create a new SSH session.
57 58 59 60 61 62 63 |
# File 'ext/libssh_ruby/session.c', line 57 static VALUE m_initialize(VALUE self) { SessionHolder *holder; TypedData_Get_Struct(self, SessionHolder, &session_type, holder); holder->session = ssh_new(); return self; } |
Instance Method Details
#add_identity(path_format) ⇒ nil
423 424 425 426 427 428 429 430 431 |
# File 'ext/libssh_ruby/session.c', line 423 static VALUE m_add_identity(VALUE self, VALUE path) { SessionHolder *holder; TypedData_Get_Struct(self, SessionHolder, &session_type, holder); RAISE_IF_ERROR((holder->session, SSH_OPTIONS_ADD_IDENTITY, StringValueCStr(path))); return Qnil; } |
#bindaddr=(addr) ⇒ nil
163 164 165 |
# File 'ext/libssh_ruby/session.c', line 163 static VALUE m_set_bindaddr(VALUE self, VALUE addr) { return set_string_option(self, SSH_OPTIONS_BINDADDR, addr); } |
#compression=(algorithm) ⇒ nil
294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 |
# File 'ext/libssh_ruby/session.c', line 294 static VALUE m_set_compression(VALUE self, VALUE compression) { SessionHolder *holder; if (compression == Qtrue || compression == Qfalse) { const char *val; if (compression == Qtrue) { val = "yes"; } else { val = "no"; } TypedData_Get_Struct(self, SessionHolder, &session_type, holder); RAISE_IF_ERROR( (holder->session, SSH_OPTIONS_COMPRESSION, val)); return Qnil; } else { return set_string_option(self, SSH_OPTIONS_COMPRESSION, compression); } } |
#compression_level=(level) ⇒ nil
322 323 324 |
# File 'ext/libssh_ruby/session.c', line 322 static VALUE m_set_compression_level(VALUE self, VALUE level) { return set_int_option(self, SSH_OPTIONS_COMPRESSION_LEVEL, level); } |
#connect ⇒ nil
450 451 452 453 454 455 456 457 458 459 460 |
# File 'ext/libssh_ruby/session.c', line 450 static VALUE m_connect(VALUE self) { SessionHolder *holder; struct nogvl_session_args args; TypedData_Get_Struct(self, SessionHolder, &session_type, holder); args.session = holder->session; rb_thread_call_without_gvl(nogvl_connect, &args, RUBY_UBF_IO, NULL); RAISE_IF_ERROR(args.rc); return Qnil; } |
#disconnect ⇒ nil
476 477 478 479 480 481 482 483 484 485 |
# File 'ext/libssh_ruby/session.c', line 476 static VALUE m_disconnect(VALUE self) { SessionHolder *holder; struct nogvl_session_args args; TypedData_Get_Struct(self, SessionHolder, &session_type, holder); args.session = holder->session; rb_thread_call_without_gvl(nogvl_disconnect, &args, RUBY_UBF_IO, NULL); return Qnil; } |
#fd ⇒ Fixnum
Get the fd of a connection
510 511 512 513 514 |
# File 'ext/libssh_ruby/session.c', line 510 static VALUE m_fd(VALUE self) { SessionHolder *holder; TypedData_Get_Struct(self, SessionHolder, &session_type, holder); return INT2FIX(ssh_get_fd(holder->session)); } |
#get_publickey ⇒ Key
598 599 600 601 602 603 604 605 606 607 608 |
# File 'ext/libssh_ruby/session.c', line 598 static VALUE m_get_publickey(VALUE self) { SessionHolder *holder; KeyHolder *key_holder; VALUE key; TypedData_Get_Struct(self, SessionHolder, &session_type, holder); key = rb_obj_alloc(rb_cLibSSHKey); key_holder = libssh_ruby_key_holder(key); RAISE_IF_ERROR(ssh_get_publickey(holder->session, &key_holder->key)); return key; } |
#gssapi_client_identity=(identity) ⇒ nil
359 360 361 |
# File 'ext/libssh_ruby/session.c', line 359 static VALUE m_set_gssapi_client_identity(VALUE self, VALUE identity) { return set_string_option(self, SSH_OPTIONS_GSSAPI_CLIENT_IDENTITY, identity); } |
#gssapi_delegate_credentials=(enable) ⇒ nil
383 384 385 386 |
# File 'ext/libssh_ruby/session.c', line 383 static VALUE m_set_gssapi_delegate_credentials(VALUE self, VALUE enable) { return set_int_option(self, SSH_OPTIONS_GSSAPI_DELEGATE_CREDENTIALS, INT2FIX(RTEST(enable) ? 1 : 0)); } |
#gssapi_server_identity=(identity) ⇒ nil
371 372 373 |
# File 'ext/libssh_ruby/session.c', line 371 static VALUE m_set_gssapi_server_identity(VALUE self, VALUE identity) { return set_string_option(self, SSH_OPTIONS_GSSAPI_SERVER_IDENTITY, identity); } |
#host=(host) ⇒ nil
116 117 118 |
# File 'ext/libssh_ruby/session.c', line 116 static VALUE m_set_host(VALUE self, VALUE host) { return set_string_option(self, SSH_OPTIONS_HOST, host); } |
#hostkeys=(key_types) ⇒ nil
281 282 283 |
# File 'ext/libssh_ruby/session.c', line 281 static VALUE m_set_hostkeys(VALUE self, VALUE hostkeys) { return set_comma_separated_option(self, SSH_OPTIONS_HOSTKEYS, hostkeys); } |
#key_exchange=(methods) ⇒ nil
269 270 271 |
# File 'ext/libssh_ruby/session.c', line 269 static VALUE m_set_key_exchange(VALUE self, VALUE kex) { return set_comma_separated_option(self, SSH_OPTIONS_KEY_EXCHANGE, kex); } |
#knownhosts=(path) ⇒ nil
175 176 177 |
# File 'ext/libssh_ruby/session.c', line 175 static VALUE m_set_knownhosts(VALUE self, VALUE path) { return set_string_option(self, SSH_OPTIONS_KNOWNHOSTS, path); } |
#log_verbosity=(verbosity) ⇒ nil
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'ext/libssh_ruby/session.c', line 73 static VALUE m_set_log_verbosity(VALUE self, VALUE verbosity) { ID id_verbosity; int c_verbosity; SessionHolder *holder; Check_Type(verbosity, T_SYMBOL); id_verbosity = SYM2ID(verbosity); if (id_verbosity == id_none) { c_verbosity = SSH_LOG_NONE; } else if (id_verbosity == id_warn) { c_verbosity = SSH_LOG_WARN; } else if (id_verbosity == id_info) { c_verbosity = SSH_LOG_INFO; } else if (id_verbosity == id_debug) { c_verbosity = SSH_LOG_DEBUG; } else if (id_verbosity == id_trace) { c_verbosity = SSH_LOG_TRACE; } else { rb_raise(rb_eArgError, "invalid verbosity: %" PRIsVALUE, verbosity); } TypedData_Get_Struct(self, SessionHolder, &session_type, holder); RAISE_IF_ERROR((holder->session, SSH_OPTIONS_LOG_VERBOSITY, &c_verbosity)); return Qnil; } |
#parse_config(path = nil) ⇒ Boolean
395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 |
# File 'ext/libssh_ruby/session.c', line 395 static VALUE m_parse_config(int argc, VALUE *argv, VALUE self) { SessionHolder *holder; VALUE path; char *c_path; rb_scan_args(argc, argv, "01", &path); if (NIL_P(path)) { c_path = NULL; } else { c_path = StringValueCStr(path); } TypedData_Get_Struct(self, SessionHolder, &session_type, holder); if ((holder->session, c_path) == 0) { return Qtrue; } else { return Qfalse; } } |
#port=(port) ⇒ nil
151 152 153 |
# File 'ext/libssh_ruby/session.c', line 151 static VALUE m_set_port(VALUE self, VALUE port) { return set_int_option(self, SSH_OPTIONS_PORT, port); } |
#protocol=(protocol) ⇒ nil
222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 |
# File 'ext/libssh_ruby/session.c', line 222 static VALUE m_set_protocol(VALUE self, VALUE protocols) { SessionHolder *holder; VALUE protocol; int i, ssh1 = 0, ssh2 = 0; Check_Type(protocols, T_ARRAY); for (i = 0; i < RARRAY_LEN(protocols); i++) { protocol = rb_ary_entry(protocols, i); Check_Type(protocol, T_FIXNUM); switch (FIX2INT(protocol)) { case 1: ssh1 = 1; break; case 2: ssh2 = 1; break; default: rb_raise(rb_eArgError, "protocol should be 1 or 2"); } } TypedData_Get_Struct(self, SessionHolder, &session_type, holder); RAISE_IF_ERROR((holder->session, SSH_OPTIONS_SSH1, &ssh1)); RAISE_IF_ERROR((holder->session, SSH_OPTIONS_SSH2, &ssh2)); return Qnil; } |
#proxycommand=(command) ⇒ nil
347 348 349 |
# File 'ext/libssh_ruby/session.c', line 347 static VALUE m_set_proxycommand(VALUE self, VALUE proxycommand) { return set_string_option(self, SSH_OPTIONS_PROXYCOMMAND, proxycommand); } |
#server_known ⇒ Fixnum
493 494 495 496 497 498 499 500 501 |
# File 'ext/libssh_ruby/session.c', line 493 static VALUE m_server_known(VALUE self) { SessionHolder *holder; int rc; TypedData_Get_Struct(self, SessionHolder, &session_type, holder); rc = ssh_is_server_known(holder->session); RAISE_IF_ERROR(rc); return INT2FIX(rc); } |
#stricthostkeycheck=(enable) ⇒ nil
334 335 336 337 |
# File 'ext/libssh_ruby/session.c', line 334 static VALUE m_set_stricthostkeycheck(VALUE self, VALUE enable) { return set_int_option(self, SSH_OPTIONS_STRICTHOSTKEYCHECK, INT2FIX(RTEST(enable) ? 1 : 0)); } |
#timeout=(sec) ⇒ nil
198 199 200 |
# File 'ext/libssh_ruby/session.c', line 198 static VALUE m_set_timeout(VALUE self, VALUE sec) { return set_long_option(self, SSH_OPTIONS_TIMEOUT, sec); } |
#timeout_usec=(usec) ⇒ nil
210 211 212 |
# File 'ext/libssh_ruby/session.c', line 210 static VALUE m_set_timeout_usec(VALUE self, VALUE usec) { return set_long_option(self, SSH_OPTIONS_TIMEOUT_USEC, usec); } |
#user=(user) ⇒ nil
128 129 130 |
# File 'ext/libssh_ruby/session.c', line 128 static VALUE m_set_user(VALUE self, VALUE user) { return set_string_option(self, SSH_OPTIONS_USER, user); } |
#userauth_list ⇒ Array<Symbol>
538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 |
# File 'ext/libssh_ruby/session.c', line 538 static VALUE m_userauth_list(VALUE self) { SessionHolder *holder; int list; VALUE ary; TypedData_Get_Struct(self, SessionHolder, &session_type, holder); list = ssh_userauth_list(holder->session, NULL); RAISE_IF_ERROR(list); ary = rb_ary_new(); if (list & SSH_AUTH_METHOD_NONE) { rb_ary_push(ary, ID2SYM(id_none)); } if (list & SSH_AUTH_METHOD_PASSWORD) { rb_ary_push(ary, ID2SYM(id_password)); } if (list & SSH_AUTH_METHOD_PUBLICKEY) { rb_ary_push(ary, ID2SYM(id_publickey)); } if (list & SSH_AUTH_METHOD_HOSTBASED) { rb_ary_push(ary, ID2SYM(id_hostbased)); } if (list & SSH_AUTH_METHOD_INTERACTIVE) { rb_ary_push(ary, ID2SYM(id_interactive)); } if (list & SSH_AUTH_METHOD_GSSAPI_MIC) { rb_ary_push(ary, ID2SYM(id_gssapi_mic)); } return ary; } |
#userauth_none ⇒ Fixnum
522 523 524 525 526 527 528 529 530 |
# File 'ext/libssh_ruby/session.c', line 522 static VALUE m_userauth_none(VALUE self) { SessionHolder *holder; int rc; TypedData_Get_Struct(self, SessionHolder, &session_type, holder); rc = ssh_userauth_none(holder->session, NULL); RAISE_IF_ERROR(rc); return INT2FIX(rc); } |
#userauth_publickey_auto ⇒ Fixnum
581 582 583 584 585 586 587 588 589 590 |
# File 'ext/libssh_ruby/session.c', line 581 static VALUE m_userauth_publickey_auto(VALUE self) { SessionHolder *holder; struct nogvl_session_args args; TypedData_Get_Struct(self, SessionHolder, &session_type, holder); args.session = holder->session; rb_thread_call_without_gvl(nogvl_userauth_publickey_auto, &args, RUBY_UBF_IO, NULL); return INT2FIX(args.rc); } |
#write_knownhost ⇒ nil
616 617 618 619 620 621 622 |
# File 'ext/libssh_ruby/session.c', line 616 static VALUE m_write_knownhost(VALUE self) { SessionHolder *holder; holder = libssh_ruby_session_holder(self); RAISE_IF_ERROR(ssh_write_knownhost(holder->session)); return Qnil; } |