in reply to Re^3: How to solve Pseudo terminal issue OpenSSH
in thread How to solve Pseudo terminal issue OpenSSH

What do you get when you pass the command as stdin_data?

Pseudo-terminal will not be allocated because stdin is not a terminal.

BTW, enable debugging for both Net::OpenSSH and the underlaying ssh.

Script logs into device. But couldn't execute stdin_data code...It enters to interactive mode. Except also didn't come to rescue

#including code for debugging $Net::OpenSSH::debug = ~0;

Here is the output

[root@server-01 perl_script]# perl perl_script4.pl # open_ex: ['ssh','-V'] # io3 mloop, cin: 0, cout: 1, cerr: 0 # io3 fast, cin: 0, cout: 1, cerr: 0 # stdout, bytes read: 46 at offset 0 #> 4f 70 65 6e 53 53 48 5f 35 2e 33 70 31 2c 20 4f 70 65 6e 53 53 4c 2 +0 31 2e 30 2e 30 2d 66 69 70 | OpenSSH_5.3p1, OpenSSL 1.0.0-fip #> 73 20 32 39 20 4d 61 72 20 32 30 31 30 0a + | s 29 Mar 2010. # io3 fast, cin: 0, cout: 1, cerr: 0 # stdout, bytes read: 0 at offset 46 # leaving _io3() # waiting for slave, timeout: 10, remaining: 10, sleep: 1 # _waitpid(31782) => pid: 31782, rc: 0, err: Interrupted system call # OpenSSH verion is 5.3p1, # ctl_path: /root/.libnet-openssh-perl/username-10.10.10.10-31781-5917 +21, ctl_dir: /root/.libnet-openssh-perl/ # _is_secure_path(dir: /root/.libnet-openssh-perl, file mode: 16832, f +ile uid: 0, euid: 0 # _is_secure_path(dir: /root, file mode: 16744, file uid: 0, euid: 0 # set_error(0 - 0) # call args: ['ssh','-vvvv','-o','ServerAliveInterval=30','-2MNx','-o' +,'NumberOfPasswordPrompts=1','-o','PreferusernameAuthentications=keyb +oard-interactive,password','-S','/root/.libnet-openssh-perl/username- +10.10.10.10-31781-591721','-l','username','10.10.10.10','--'] # master state jumping from _STATE_START to _STATE_LOGIN # file object not yet found at /root/.libnet-openssh-perl/username-10. +10.10.10-31781-591721, state:_STATE_LOGIN # file object not yet found at /root/.libnet-openssh-perl/username-10. +10.10.10-31781-591721, state:_STATE_LOGIN # file object not yet found at /root/.libnet-openssh-perl/username-10. +10.10.10-31781-591721, state:_STATE_LOGIN # file object not yet found at /root/.libnet-openssh-perl/username-10. +10.10.10-31781-591721, state:_STATE_LOGIN # file object not yet found at /root/.libnet-openssh-perl/username-10. +10.10.10-31781-591721, state:_STATE_LOGIN # file object not yet found at /root/.libnet-openssh-perl/username-10. +10.10.10-31781-591721, state:_STATE_LOGIN # tracer attached, ssh pid: 31783, tracer pid: 31784 OpenSSH_5.3p1, OpenSSL 1.0.0-fips 29 Mar 2010 debug1: Reading configuration data /etc/ssh/ssh_config debug1: Applying options for * debug2: ssh_connect: needpriv 0 debug1: Connecting to 10.10.10.10 [10.10.10.10] port 22. debug1: Connection established. debug1: permanently_set_uid: 0/0 debug1: identity file /root/.ssh/id_rsa type -1 debug1: identity file /root/.ssh/id_dsa type -1 debug1: Remote protocol version 2.0, remote software version OpenSSH_5 +.1 debug1: match: OpenSSH_5.1 pat OpenSSH* debug1: Enabling compatibility mode for protocol 2.0 debug1: Local version string SSH-2.0-OpenSSH_5.3 debug2: fd 3 setting O_NONBLOCK debug1: SSH2_MSG_KEXINIT sent debug3: Wrote 792 bytes for a total of 813 debug1: SSH2_MSG_KEXINIT received debug2: kex_parse_kexinit: diffie-hellman-group-exchange-sha256,diffie +-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellm +an-group1-sha1 debug2: kex_parse_kexinit: ssh-rsa,ssh-dss debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256 +,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,a +es256-cbc,arcfour,rijndael-cbc@lysator.liu.se debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256 +,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,a +es256-cbc,arcfour,rijndael-cbc@lysator.liu.se debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,umac-64@openssh.com,hmac +-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96 debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,umac-64@openssh.com,hmac +-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96 debug2: kex_parse_kexinit: none,zlib@openssh.com,zlib debug2: kex_parse_kexinit: none,zlib@openssh.com,zlib debug2: kex_parse_kexinit: debug2: kex_parse_kexinit: debug2: kex_parse_kexinit: first_kex_follows 0 debug2: kex_parse_kexinit: reserved 0 debug2: kex_parse_kexinit: diffie-hellman-group-exchange-sha256,diffie +-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellm +an-group1-sha1 debug2: kex_parse_kexinit: ssh-rsa debug2: kex_parse_kexinit: aes128-cbc,3des-cbc,blowfish-cbc,cast128-cb +c,arcfour128,arcfour256,arcfour,aes192-cbc,aes256-cbc,rijndael-cbc@ly +sator.liu.se,aes128-ctr,aes192-ctr,aes256-ctr debug2: kex_parse_kexinit: aes128-cbc,3des-cbc,blowfish-cbc,cast128-cb +c,arcfour128,arcfour256,arcfour,aes192-cbc,aes256-cbc,rijndael-cbc@ly +sator.liu.se,aes128-ctr,aes192-ctr,aes256-ctr debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,umac-64@openssh.com,hmac +-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96 debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,umac-64@openssh.com,hmac +-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96 debug2: kex_parse_kexinit: none,zlib@openssh.com debug2: kex_parse_kexinit: none,zlib@openssh.com debug2: kex_parse_kexinit: debug2: kex_parse_kexinit: debug2: kex_parse_kexinit: first_kex_follows 0 debug2: kex_parse_kexinit: reserved 0 debug2: mac_setup: found hmac-md5 debug1: kex: server->client aes128-ctr hmac-md5 none debug2: mac_setup: found hmac-md5 debug1: kex: client->server aes128-ctr hmac-md5 none debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP debug3: Wrote 24 bytes for a total of 837 debug2: dh_gen_key: priv key bits set: 128/256 debug2: bits set: 1008/2048 debug1: SSH2_MSG_KEX_DH_GEX_INIT sent debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY debug3: Wrote 272 bytes for a total of 1109 debug3: check_host_in_hostfile: filename /root/.ssh/known_hosts2 debug3: check_host_in_hostfile: match line 1 debug1: Host '10.10.10.10' is known and matches the RSA host key. debug1: Found key in /root/.ssh/known_hosts2:1 debug2: bits set: 999/2048 debug1: ssh_rsa_verify: signature correct debug2: kex_derive_keys debug2: set_newkeys: mode 1 debug1: SSH2_MSG_NEWKEYS sent debug1: expecting SSH2_MSG_NEWKEYS debug3: Wrote 16 bytes for a total of 1125 debug2: set_newkeys: mode 0 debug1: SSH2_MSG_NEWKEYS received debug1: SSH2_MSG_SERVICE_REQUEST sent debug3: Wrote 48 bytes for a total of 1173 debug2: service_accept: ssh-userauth debug1: SSH2_MSG_SERVICE_ACCEPT received debug2: key: /root/.ssh/id_rsa ((nil)) debug2: key: /root/.ssh/id_dsa ((nil)) debug3: Wrote 64 bytes for a total of 1237 debug3: input_userauth_banner +============================================= +==+ | | +============================================= +==+ debug1: Authentications that can continue: publickey,password,keyboard +-interactive debug3: start over, passed a different list publickey,password,keyboar +d-interactive debug3: preferusername keyboard-interactive,password debug3: authmethod_lookup keyboard-interactive debug3: remaining preferusername: password debug3: authmethod_is_enabled keyboard-interactive debug1: Next authentication method: keyboard-interactive debug2: userauth_kbdint debug2: we sent a keyboard-interactive packet, wait for reply debug3: Wrote 96 bytes for a total of 1333 debug1: Authentications that can continue: publickey,password,keyboard +-interactive debug2: we did not send a packet, disable method debug3: authmethod_lookup password debug3: remaining preferusername: debug3: authmethod_is_enabled password debug1: Next authentication method: password # file object not yet found at /root/.libnet-openssh-perl/username-10. +10.10.10-31781-591721, state:_STATE_LOGIN # passwd/passphrase requested (username@10.10.10.10's password:) # file object not yet found at /root/.libnet-openssh-perl/username-10. +10.10.10-31781-591721, state:_STATE_AWAITING_MUX debug3: packet_send2: adding 64 (len 56 padlen 8 extra_pad 64) debug2: we sent a password packet, wait for reply debug3: Wrote 144 bytes for a total of 1477 # file object not yet found at /root/.libnet-openssh-perl/username-10. +10.10.10-31781-591721, state:_STATE_AWAITING_MUX debug1: Authentication succeeded (password). debug1: setting up multiplex master socket debug2: fd 4 setting O_NONBLOCK debug1: Entering interactive session. # file object found at /root/.libnet-openssh-perl/username-10.10.10.10 +-31781-591721 # master state jumping from _STATE_AWAITING_MUX to _STATE_RUNNING # call args: ['ssh','-O','check','-T','-S','/root/.libnet-openssh-perl +/username-10.10.10.10-31781-591721','-l','username','10.10.10.10','-- +'] # open_ex: ['ssh','-O','check','-T','-S','/root/.libnet-openssh-perl/u +sername-10.10.10.10-31781-591721','-l','username','10.10.10.10','--'] # io3 mloop, cin: 0, cout: 1, cerr: 0 # io3 fast, cin: 0, cout: 1, cerr: 0 debug3: fd 5 is not O_NONBLOCK debug3: ssh_msg_recv entering debug3: ssh_msg_send: type 2 # stdout, bytes read: 28 at offset 0 #> 4d 61 73 74 65 72 20 72 75 6e 6e 69 6e 67 20 28 70 69 64 3d 33 31 3 +7 38 33 29 0d 0a | Master running (pid=31783).. # io3 fast, cin: 0, cout: 1, cerr: 0 # stdout, bytes read: 0 at offset 28 # leaving _io3() # _waitpid(31787) => pid: 31787, rc: 0, err: # call args: ['ssh','-S','/root/.libnet-openssh-perl/username-10.10.10 +.10-31781-591721','-l','username','10.10.10.10','--'] # open_ex: ['ssh','-S','/root/.libnet-openssh-perl/username-10.10.10.1 +0-31781-591721','-l','username','10.10.10.10','--'] # io3 mloop, cin: 1, cout: 1, cerr: 0 # io3 fast, cin: 1, cout: 1, cerr: 0 # stdin, bytes written: 16 #> 73 68 6f 77 20 63 6c 6f 63 6b 0a 65 78 69 74 0a + | show clock.exit. # io3 mloop, cin: 0, cout: 1, cerr: 0 # io3 fast, cin: 0, cout: 1, cerr: 0 Pseudo-terminal will not be allocated because stdin is not a terminal. debug3: fd 5 is not O_NONBLOCK debug3: ssh_msg_recv entering debug3: ssh_msg_send: type 2 debug3: ssh_msg_recv entering debug3: muxserver_accept_control: receiving 1 env vars debug2: muxserver_accept_control: accepted tty 0, subsys 0, cmd debug2: muxserver_accept_control: got fds stdin 6, stdout 7, stderr 8 debug3: ssh_msg_send: type 2 debug2: fd 6 setting O_NONBLOCK debug2: fd 7 setting O_NONBLOCK debug2: fd 5 setting O_NONBLOCK debug1: channel 0: new [client-session] debug3: muxserver_accept_control: channel_new: 0 debug2: channel 0: send open debug3: Wrote 64 bytes for a total of 1541 debug2: callback start debug2: client_session2_setup: id 0 debug1: Sending environment. debug1: Sending env LANG = en_US.UTF-8 debug2: channel 0: request env confirm 0 debug2: channel 0: request shell confirm 1 debug2: callback done debug2: channel 0: open confirm rwindow 0 rmax 32768 debug3: Wrote 112 bytes for a total of 1653 debug2: channel 0: rcvd adjust 2097152 debug2: channel_input_status_confirm: type 99 id 0 debug2: shell request accepted on channel 0 debug2: channel 0: read<=0 rfd 6 len 0 debug2: channel 0: read failed debug2: channel 0: close_read debug2: channel 0: input open -> drain debug3: Wrote 64 bytes for a total of 1717 debug2: channel 0: ibuf empty debug2: channel 0: send eof debug2: channel 0: input drain -> closed debug3: Wrote 32 bytes for a total of 1749 # stdout, bytes read: 10 at offset 0 #> 1b 5b 32 4a 1b 5b 31 3b 31 48 + | .[2J.[1;1H # io3 fast, cin: 0, cout: 1, cerr: 0 debug2: channel 0: rcvd eof debug2: channel 0: output open -> drain debug2: channel 0: obuf empty debug2: channel 0: close_write debug2: channel 0: output drain -> closed debug2: channel 0: send close debug3: Wrote 32 bytes for a total of 1781 debug1: client_input_channel_req: channel 0 rtype exit-signal reply 0 debug2: channel 0: rcvd close debug3: channel 0: will not send data after close debug2: channel 0: is dead debug2: channel 0: garbage collecting debug1: channel 0: free: client-session, nchannels 1 debug3: channel 0: status: The following connections are open: #0 client-session (t4 r0 i3/0 o3/0 fd -1/-1 cfd 5) # stdout, bytes read: 0 at offset 10 # leaving _io3() debug3: channel 0: close_fds r -1 w -1 e 8 c 5 # _waitpid(31788) => pid: 31788, rc: 65280, err: # set_error(5 - child exited with code 255) Couldn't run remote command: child exited with code 255 at perl_script +4.pl line 42. # DESTROY(Net::OpenSSH=HASH(0x133ae68), pid: 31783) # sending exit control to master # call args: ['ssh','-O','exit','-T','-S','/root/.libnet-openssh-perl/ +username-10.10.10.10-31781-591721','-l','username','10.10.10.10','--' +] # open_ex: ['ssh','-O','exit','-T','-S','/root/.libnet-openssh-perl/us +ername-10.10.10.10-31781-591721','-l','username','10.10.10.10','--'] # io3 mloop, cin: 0, cout: 1, cerr: 0 # io3 fast, cin: 0, cout: 1, cerr: 0 debug3: fd 5 is not O_NONBLOCK debug3: ssh_msg_recv entering debug3: ssh_msg_send: type 2 debug3: Wrote 64 bytes for a total of 1845 Transferusername: sent 1648, received 3088 bytes, in 0.2 seconds Bytes per second: sent 6973.7, received 13067.1 debug1: Exit status -1 # stdout, bytes read: 20 at offset 0 #> 45 78 69 74 20 72 65 71 75 65 73 74 20 73 65 6e 74 2e 0d 0a + | Exit request sent... # io3 fast, cin: 0, cout: 1, cerr: 0 # stdout, bytes read: 0 at offset 20 # leaving _io3() # _waitpid(31789) => pid: 31789, rc: 0, err: # set_error(1 - aborted) # master state jumping from _STATE_RUNNING to _STATE_KILLING # master 31783 exited, rc:65280, err: # master state jumping from _STATE_KILLING to _STATE_GONE [root@server-01 perl_script]#

Replies are listed 'Best First'.
Re^5: How to solve Pseudo terminal issue OpenSSH
by salva (Canon) on May 14, 2015 at 09:00 UTC
    The remote shell is not recognizing the command sent and dying with some signal (probably SIGHUP or SIGPIPE).

    Try using CRLF as the line terminator:

    my @output = $ssh->capture({stdin_data => "@cmd\r\n@quitcmd\r\n"});
    Note also, that capture may return some content even when an error is signaled and getting the error OSSH_SLAVE_CMD_FAILED may be non fatal.
      my @output = $ssh->capture({stdin_data => "@cmd\r\n@quitcmd\r\n"});

      With above line, there is additional PERIOD send Any idea how to remove those PERIODS

      # stdin, bytes written: 18 #> 73 68 6f 77 20 63 6c 6f 63 6b 0d 0a 65 78 69 74 0d 0a + | show clock..exit.. =======>additional + period send from stdin_data # io3 mloop, cin: 0, cout: 1, cerr: 0 # io3 fast, cin: 0, cout: 1, cerr: 0 Pseudo-terminal will not be allocated because stdin is not a terminal.
        The periods are how non-printable characters are represented on the debugging output. It is the classic format for an hexdump.

        In this particular case, they correspond to the CRLF characters ("\r\n").