Ansible SSH connection plugin not working

I am the maintainer of citrix.adc ansible collection and we have a ssh_connection_plugin for the citrix.adc ansible collection.

When I run ansible-playbook using this connection plugin, I am facing some unknown error which is difficult to debug. Maybe because I do not know the nitty-gritty of the working of the shell module.

ansible-playbook command ran:

ansible-playbook nsver_info.yaml -i inventory.ini -l mpx --ask-pass -vvvvv

Below are the details

Thanks in advance

Playbook gist

To run show ns version on the NetScaler CLI prompt.

Manually SSH into the ADC and run the command which playbook runs

as soon as we SSH into the ADC, we will be in NSCLI prompt (not shell prompt). We need to type shell command to take us into shell prompt.

The intention of our connection plugin is to run tasks directly into shell prompt.

I believe, we are getting error before running any tasks!

Manual SSH

ssh nsroot@10.x.x.42
###############################################################################
#                                                                             #
#        WARNING: Access to this system is for authorized users only          #
#         Disconnect IMMEDIATELY if you are not an authorized user!           #
#                                                                             #
###############################################################################

(nsroot@10.x.x.42) Password:
Last login: xxx xxx xx xx:xx:xx xxxx from 10.x.x.x
Warning: You are connected to a secondary node; configuration changes made in this session will not be propagated to, or saved on, other nodes (Primary node is 10.x.x.43)
 Done
ABC>
ABC> shell
Copyright (c) 1992-2013 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
	The Regents of the University of California. All rights reserved.

root@ns#
root@ns# nscli -s -U :nsroot:xxxxxxx show version | grep -i 'NetScaler NS'
Warning: You are connected to a secondary node; configuration changes made in this session will not be propagated to, or saved on, other nodes (Primary node is 10.217.206.43)
	NetScaler NS12.1: Build 65.39.nc, Date: Dec 18 2023, 06:48:15   (64-bit)
root@ns#

nsver_info.yaml file

- name: Find NS version
  hosts: mpx
  remote_user: nsroot
  connection: citrix.adc.ssh_citrix_adc
  gather_facts: false

  vars:
    ansible_python_interpreter: '{{ netscaler_python_path | default("/var/python/bin/python") }}'

  tasks:
    - name: Finding the current version of the NetScaler
      shell:
        cmd: "nscli -s -U :nsroot:{{ nitro_pass }} show version | grep -i 'NetScaler NS'"
      register: version

    - name: NetScaler version
      debug:
        msg: "{{ version }}"
      register: present_version

inventory file

[mpx]
10.x.x.42 nsip=10.x.x.42  nitro_user=nsroot nitro_pass=xxxxxxx validate_certs=no ansible_host=10.x.x.42 ansible_user=nsroot

ansible.cfg

[defaults]
remote_tmp = /var/
pipelining = true


[ssh_connection]
scp_if_ssh = True
retries = 3

[connection]
retries = 3

Short error

fatal: [10.x.x.42]: FAILED! => {
    "changed": false,
    "module_stderr": "OpenSSH_8.9p1 Ubuntu-3ubuntu0.6, OpenSSL 3.0.2 15 Mar 2022\r\ndebug1: Reading configuration data /home/sumanthl/.ssh/config\r\ndebug1: Reading configuration data /etc/ssh/ssh_config\r\ndebug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files\r\ndebug1: /etc/ssh/ssh_config line 21: Applying options for *\r\ndebug2: resolve_canonicalize: hostname 10.x.x.42 is address\r\ndebug3: expanded UserKnownHostsFile '~/.ssh/known_hosts' -> '/home/sumanthl/.ssh/known_hosts'\r\ndebug3: expanded UserKnownHostsFile '~/.ssh/known_hosts2' -> '/home/sumanthl/.ssh/known_hosts2'\r\ndebug1: auto-mux: Trying existing master\r\ndebug2: fd 3 setting O_NONBLOCK\r\ndebug2: mux_client_hello_exchange: master version 4\r\ndebug3: mux_client_forwards: request forwardings: 0 local, 0 remote\r\ndebug3: mux_client_request_session: entering\r\ndebug3: mux_client_request_alive: entering\r\ndebug3: mux_client_request_alive: done pid = 1041040\r\ndebug3: mux_client_request_session: session request sent\r\ndebug1: mux_client_request_session: master session id: 2\r\nERROR: Not logged in\ndebug3: mux_client_read_packet: read header failed: Broken pipe\r\ndebug2: Received exit status from master 1\r\n",
    "module_stdout": "ERROR: Session expired or killed. Please login again\nERROR: Not logged in\n",
    "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error",
    "rc": 1
}

Long error is in the below gist

What result do you get if you try manually run the command Ansible ran?

I think this is the command to try (after correcting the IP address):

export SSHPASS=YOURPASSWORD
sshpass -e ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o Port=22 -o 'User="nsroot"' -o ConnectTimeout=10 -o 'ControlPath="/home/sumanthl/.ansible/cp/90241bcd3b"' 10.x.x.42 'shell /bin/sh -c '"'"'/var/python/bin/python && sleep 0'"'"''
1 Like

There is a note in the description of this plugin that says “The only authentication method that works with this plugin is with ssh key file”, so I think this failure is expected. It’s not a great UX to permit the configuration of authentication methods that don’t work, but that appears to be the current state.

2 Likes

@chris, below is the output after trying the command you mentioned.

It keeps retrying the the end step. I had to interrupt it to end.

❯ sshpass -e ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o Port=22 -o 'User="nsroot"' -o ConnectTimeout=10 -o 'ControlPath="/home/sumanthl/.ansible/cp/90241bcd3b"' 10.x.x.42 'shell /bin/sh -c '"'"'/var/python/bin/python && sleep 0'"'"''

OpenSSH_8.9p1 Ubuntu-3ubuntu0.6, OpenSSL 3.0.2 15 Mar 2022
debug1: Reading configuration data /home/sumanthl/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files
debug1: /etc/ssh/ssh_config line 21: Applying options for *
debug2: resolve_canonicalize: hostname 10.x.x.42 is address
debug3: expanded UserKnownHostsFile '~/.ssh/known_hosts' -> '/home/sumanthl/.ssh/known_hosts'
debug3: expanded UserKnownHostsFile '~/.ssh/known_hosts2' -> '/home/sumanthl/.ssh/known_hosts2'
debug1: auto-mux: Trying existing master
debug1: Control socket "/home/sumanthl/.ansible/cp/90241bcd3b" does not exist
debug3: ssh_connect_direct: entering
debug1: Connecting to 10.x.x.42 [10.x.x.42] port 22.
debug3: set_sock_tos: set socket 3 IP_TOS 0x10
debug2: fd 3 setting O_NONBLOCK
debug1: fd 3 clearing O_NONBLOCK
debug1: Connection established.
debug3: timeout: 10000 ms remain after connect
debug1: identity file /home/sumanthl/.ssh/id_rsa type 0
debug1: identity file /home/sumanthl/.ssh/id_rsa-cert type -1
debug1: identity file /home/sumanthl/.ssh/id_ecdsa type -1
debug1: identity file /home/sumanthl/.ssh/id_ecdsa-cert type -1
debug1: identity file /home/sumanthl/.ssh/id_ecdsa_sk type -1
debug1: identity file /home/sumanthl/.ssh/id_ecdsa_sk-cert type -1
debug1: identity file /home/sumanthl/.ssh/id_ed25519 type -1
debug1: identity file /home/sumanthl/.ssh/id_ed25519-cert type -1
debug1: identity file /home/sumanthl/.ssh/id_ed25519_sk type -1
debug1: identity file /home/sumanthl/.ssh/id_ed25519_sk-cert type -1
debug1: identity file /home/sumanthl/.ssh/id_xmss type -1
debug1: identity file /home/sumanthl/.ssh/id_xmss-cert type -1
debug1: identity file /home/sumanthl/.ssh/id_dsa type -1
debug1: identity file /home/sumanthl/.ssh/id_dsa-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.6
debug1: Remote protocol version 2.0, remote software version OpenSSH_8.0
debug1: compat_banner: match: OpenSSH_8.0 pat OpenSSH* compat 0x04000000
debug2: fd 3 setting O_NONBLOCK
debug1: Authenticating to 10.x.x.42:22 as 'nsroot'
debug3: record_hostkey: found key type RSA in file /home/sumanthl/.ssh/known_hosts:44
debug3: load_hostkeys_file: loaded 1 keys from 10.x.x.42
debug1: load_hostkeys: fopen /home/sumanthl/.ssh/known_hosts2: No such file or directory
debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts: No such file or directory
debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts2: No such file or directory
debug3: order_hostkeyalgs: prefer hostkeyalgs: rsa-sha2-512-cert-v01@openssh.com,rsa-sha2-256-cert-v01@openssh.com,rsa-sha2-512,rsa-sha2-256
debug3: send packet: type 20
debug1: SSH2_MSG_KEXINIT sent
debug3: receive packet: type 20
debug1: SSH2_MSG_KEXINIT received
debug2: local client KEXINIT proposal
debug2: KEX algorithms: curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,sntrup761x25519-sha512@openssh.com,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256,ext-info-c,kex-strict-c-v00@openssh.com
debug2: host key algorithms: rsa-sha2-512-cert-v01@openssh.com,rsa-sha2-256-cert-v01@openssh.com,rsa-sha2-512,rsa-sha2-256,ssh-ed25519-cert-v01@openssh.com,ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,sk-ssh-ed25519-cert-v01@openssh.com,sk-ecdsa-sha2-nistp256-cert-v01@openssh.com,ssh-ed25519,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ssh-ed25519@openssh.com,sk-ecdsa-sha2-nistp256@openssh.com
debug2: ciphers ctos: chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com
debug2: ciphers stoc: chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com
debug2: MACs ctos: umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: MACs stoc: umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: compression ctos: zlib@openssh.com,zlib,none
debug2: compression stoc: zlib@openssh.com,zlib,none
debug2: languages ctos: 
debug2: languages stoc: 
debug2: first_kex_follows 0 
debug2: reserved 0 
debug2: peer server KEXINIT proposal
debug2: KEX algorithms: curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1
debug2: host key algorithms: rsa-sha2-512,rsa-sha2-256,ssh-rsa
debug2: ciphers ctos: chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com
debug2: ciphers stoc: chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com
debug2: MACs ctos: umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: MACs stoc: umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: compression ctos: none,zlib@openssh.com
debug2: compression stoc: none,zlib@openssh.com
debug2: languages ctos: 
debug2: languages stoc: 
debug2: first_kex_follows 0 
debug2: reserved 0 
debug1: kex: algorithm: curve25519-sha256
debug1: kex: host key algorithm: rsa-sha2-512
debug1: kex: server->client cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: zlib@openssh.com
debug1: kex: client->server cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: zlib@openssh.com
debug3: send packet: type 30
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug3: receive packet: type 31
debug1: SSH2_MSG_KEX_ECDH_REPLY received
debug1: Server host key: ssh-rsa SHA256:q/Drz1qILBJK+r8oJBA5ctpxvwRR6DeVPDbuHlwt6yw
debug3: record_hostkey: found key type RSA in file /home/sumanthl/.ssh/known_hosts:44
debug3: load_hostkeys_file: loaded 1 keys from 10.x.x.42
debug1: load_hostkeys: fopen /home/sumanthl/.ssh/known_hosts2: No such file or directory
debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts: No such file or directory
debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts2: No such file or directory
debug1: Host '10.x.x.42' is known and matches the RSA host key.
debug1: Found key in /home/sumanthl/.ssh/known_hosts:44
debug3: send packet: type 21
debug2: ssh_set_newkeys: mode 1
debug1: rekey out after 134217728 blocks
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug3: receive packet: type 21
debug1: SSH2_MSG_NEWKEYS received
debug2: ssh_set_newkeys: mode 0
debug1: rekey in after 134217728 blocks
debug1: Will attempt key: /home/sumanthl/.ssh/id_rsa RSA SHA256:0kUP3fYE9KcecQLpwrsHbV1V7MqW9m8vnUq7BWZrhjk
debug1: Will attempt key: /home/sumanthl/.ssh/id_ecdsa 
debug1: Will attempt key: /home/sumanthl/.ssh/id_ecdsa_sk 
debug1: Will attempt key: /home/sumanthl/.ssh/id_ed25519 
debug1: Will attempt key: /home/sumanthl/.ssh/id_ed25519_sk 
debug1: Will attempt key: /home/sumanthl/.ssh/id_xmss 
debug1: Will attempt key: /home/sumanthl/.ssh/id_dsa 
debug2: pubkey_prepare: done
debug3: send packet: type 5
debug3: receive packet: type 7
debug1: SSH2_MSG_EXT_INFO received
debug1: kex_input_ext_info: server-sig-algs=<ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521>
debug3: receive packet: type 6
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug3: send packet: type 50
debug3: receive packet: type 53
debug3: input_userauth_banner: entering
###############################################################################
#                                                                             #
#        WARNING: Access to this system is for authorized users only          #
#         Disconnect IMMEDIATELY if you are not an authorized user!           #
#                                                                             #
###############################################################################

debug3: receive packet: type 51
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug3: start over, passed a different list publickey,password,keyboard-interactive
debug3: preferred gssapi-with-mic,publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering public key: /home/sumanthl/.ssh/id_rsa RSA SHA256:0kUP3fYE9KcecQLpwrsHbV1V7MqW9m8vnUq7BWZrhjk
debug3: send packet: type 50
debug2: we sent a publickey packet, wait for reply
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug1: Trying private key: /home/sumanthl/.ssh/id_ecdsa
debug3: no such identity: /home/sumanthl/.ssh/id_ecdsa: No such file or directory
debug1: Trying private key: /home/sumanthl/.ssh/id_ecdsa_sk
debug3: no such identity: /home/sumanthl/.ssh/id_ecdsa_sk: No such file or directory
debug1: Trying private key: /home/sumanthl/.ssh/id_ed25519
debug3: no such identity: /home/sumanthl/.ssh/id_ed25519: No such file or directory
debug1: Trying private key: /home/sumanthl/.ssh/id_ed25519_sk
debug3: no such identity: /home/sumanthl/.ssh/id_ed25519_sk: No such file or directory
debug1: Trying private key: /home/sumanthl/.ssh/id_xmss
debug3: no such identity: /home/sumanthl/.ssh/id_xmss: No such file or directory
debug1: Trying private key: /home/sumanthl/.ssh/id_dsa
debug3: no such identity: /home/sumanthl/.ssh/id_dsa: No such file or directory
debug2: we did not send a packet, disable method
debug3: authmethod_lookup keyboard-interactive
debug3: remaining preferred: password
debug3: authmethod_is_enabled keyboard-interactive
debug1: Next authentication method: keyboard-interactive
debug2: userauth_kbdint
debug3: send packet: type 50
debug2: we sent a keyboard-interactive packet, wait for reply
debug3: receive packet: type 60
debug2: input_userauth_info_req: entering
debug2: input_userauth_info_req: num_prompts 1
debug3: send packet: type 61
debug3: receive packet: type 52
debug1: Enabling compression at level 6.
Authenticated to 10.x.x.42 ([10.x.x.42]:22) using "keyboard-interactive".
debug1: setting up multiplex master socket
debug3: muxserver_listen: temporary control path /home/sumanthl/.ansible/cp/90241bcd3b.AdrtizGrmF2wdWAX
debug2: fd 4 setting O_NONBLOCK
debug3: fd 4 is O_NONBLOCK
debug3: fd 4 is O_NONBLOCK
debug1: channel 0: new [/home/sumanthl/.ansible/cp/90241bcd3b]
debug3: muxserver_listen: mux listener channel 0 fd 4
debug2: fd 3 setting TCP_NODELAY
debug3: set_sock_tos: set socket 3 IP_TOS 0x08
debug1: control_persist_detach: backgrounding master process
debug2: control_persist_detach: background process is 1060969
debug2: fd 4 setting O_NONBLOCK
debug1: forking to background
debug1: Entering interactive session.
debug1: pledge: id
debug2: set_control_persist_exit_time: schedule exit in 60 seconds
debug1: multiplexing control connection
debug2: fd 5 setting O_NONBLOCK
debug3: fd 5 is O_NONBLOCK
debug1: channel 1: new [mux-control]
debug3: channel_post_mux_listener: new mux channel 1 fd 5
debug3: mux_master_read_cb: channel 1: hello sent
debug2: set_control_persist_exit_time: cancel scheduled exit
debug3: mux_master_read_cb: channel 1 packet type 0x00000001 len 4
debug2: mux_master_process_hello: channel 1 client version 4
debug2: mux_client_hello_exchange: master version 4
debug3: mux_client_forwards: request forwardings: 0 local, 0 remote
debug3: mux_client_request_session: entering
debug3: mux_client_request_alive: entering
debug3: mux_master_read_cb: channel 1 packet type 0x10000004 len 4
debug2: mux_master_process_alive_check: channel 1: alive check
debug3: mux_client_request_alive: done pid = 1060971
debug3: mux_client_request_session: session request sent
debug3: mux_master_read_cb: channel 1 packet type 0x10000002 len 144
debug2: mux_master_process_new_session: channel 1: request tty 0, X 0, agent 0, subsys 0, term "xterm-256color", cmd "shell /bin/sh -c '/var/python/bin/python && sleep 0'", env 2
debug3: mux_master_process_new_session: got fds stdin 6, stdout 7, stderr 8
debug1: channel 2: new [client-session]
debug2: mux_master_process_new_session: channel_new: 2 linked to control channel 1
debug2: channel 2: send open
debug3: send packet: type 90
debug3: receive packet: type 80
debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0
debug3: client_input_hostkeys: received RSA key SHA256:q/Drz1qILBJK+r8oJBA5ctpxvwRR6DeVPDbuHlwt6yw
debug3: client_input_hostkeys: received DSA key SHA256:IWuuy4lnwZTckAuMxKZmKycqmJOmwXlVI88Wnu/EETo
debug3: client_input_hostkeys: ssh-dss key not permitted by HostkeyAlgorithms
debug1: client_input_hostkeys: searching /home/sumanthl/.ssh/known_hosts for 10.x.x.42 / (none)
debug3: hostkeys_foreach: reading file "/home/sumanthl/.ssh/known_hosts"
debug3: hostkeys_find: found ssh-rsa key at /home/sumanthl/.ssh/known_hosts:44
debug1: client_input_hostkeys: searching /home/sumanthl/.ssh/known_hosts2 for 10.x.x.42 / (none)
debug1: client_input_hostkeys: hostkeys file /home/sumanthl/.ssh/known_hosts2 does not exist
debug3: client_input_hostkeys: 1 server keys: 0 new, 1 retained, 0 incomplete match. 0 to remove
debug1: client_input_hostkeys: no new or deprecated keys from server
debug3: receive packet: type 91
debug2: channel_input_open_confirmation: channel 2: callback start
debug2: client_session2_setup: id 2
debug1: Sending environment.
debug1: channel 2: setting env LANG = "en_US.UTF-8"
debug2: channel 2: request env confirm 0
debug3: send packet: type 98
debug1: channel 2: setting env LC_ALL = "en_US.UTF-8"
debug2: channel 2: request env confirm 0
debug3: send packet: type 98
debug1: Sending command: shell /bin/sh -c '/var/python/bin/python && sleep 0'
debug2: channel 2: request exec confirm 1
debug3: send packet: type 98
debug3: mux_session_confirm: sending success reply
debug2: channel_input_open_confirmation: channel 2: callback done
debug2: channel 2: open confirm rwindow 0 rmax 32768
debug1: mux_client_request_session: master session id: 2
debug2: channel 2: rcvd adjust 2097152
debug3: receive packet: type 99
debug2: channel_input_status_confirm: type 99 id 2
debug2: exec request accepted on channel 2
debug2: channel 2: rcvd ext data 175
Warning: You are connected to a secondary node; configuration changes made in this session will not be propagated to, or saved on, other nodes (Primary node is 10.x.x.43)
debug2: channel 2: written 175 to efd 8
 Done
debug3: receive packet: type 98
debug1: client_input_channel_req: channel 2 rtype keepalive@openssh.com reply 1
debug3: send packet: type 100
debug3: receive packet: type 98
debug1: client_input_channel_req: channel 2 rtype keepalive@openssh.com reply 1
debug3: send packet: type 100
debug3: receive packet: type 98
debug1: client_input_channel_req: channel 2 rtype keepalive@openssh.com reply 1
debug3: send packet: type 100
debug3: receive packet: type 98

@flowerysong, can you please paste the URL of the documentation please?

The link you provided in your initial post. ansible-collection-netscaleradc/ansible-collections/adc/plugins/connection/ssh_citrix_adc.py at citrix.adc · netscaler/ansible-collection-netscaleradc · GitHub

Line 29.

I’m afraid I don’t know not sure what the result mean… What happens if you change the final command in the line to do something else, like print the uptime?

@chris below is the output when we replace the last command with uptime

❯ sshpass -e ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o Port=22 -o 'User="nsroot"' -o ConnectTimeout=10 -o 'ControlPath="/home/sumanthl/.ansible/cp/90241bcd3b"' 10.x.x.42 'uptime'

OpenSSH_8.9p1 Ubuntu-3ubuntu0.6, OpenSSL 3.0.2 15 Mar 2022
debug1: Reading configuration data /home/sumanthl/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files
debug1: /etc/ssh/ssh_config line 21: Applying options for *
debug2: resolve_canonicalize: hostname 10.x.x.42 is address
debug3: expanded UserKnownHostsFile '~/.ssh/known_hosts' -> '/home/sumanthl/.ssh/known_hosts'
debug3: expanded UserKnownHostsFile '~/.ssh/known_hosts2' -> '/home/sumanthl/.ssh/known_hosts2'
debug1: auto-mux: Trying existing master
debug2: fd 3 setting O_NONBLOCK
debug1: multiplexing control connection
debug2: fd 5 setting O_NONBLOCK
debug3: fd 5 is O_NONBLOCK
debug1: channel 1: new [mux-control]
debug3: channel_post_mux_listener: new mux channel 1 fd 5
debug3: mux_master_read_cb: channel 1: hello sent
debug2: set_control_persist_exit_time: cancel scheduled exit
debug3: mux_master_read_cb: channel 1 packet type 0x00000001 len 4
debug2: mux_master_process_hello: channel 1 client version 4
debug2: mux_client_hello_exchange: master version 4
debug3: mux_client_forwards: request forwardings: 0 local, 0 remote
debug3: mux_client_request_session: entering
debug3: mux_client_request_alive: entering
debug3: mux_master_read_cb: channel 1 packet type 0x10000004 len 4
debug2: mux_master_process_alive_check: channel 1: alive check
debug3: mux_client_request_alive: done pid = 1069101
debug3: mux_client_request_session: session request sent
debug3: mux_master_read_cb: channel 1 packet type 0x10000002 len 98
debug2: mux_master_process_new_session: channel 1: request tty 0, X 0, agent 0, subsys 0, term "xterm-256color", cmd "uptime", env 2
debug3: mux_master_process_new_session: got fds stdin 6, stdout 7, stderr 8
debug1: channel 2: new [client-session]
debug2: mux_master_process_new_session: channel_new: 2 linked to control channel 1
debug2: channel 2: send open
debug3: send packet: type 90
debug3: receive packet: type 91
debug2: channel_input_open_confirmation: channel 2: callback start
debug2: client_session2_setup: id 2
debug1: Sending environment.
debug1: channel 2: setting env LANG = "en_US.UTF-8"
debug2: channel 2: request env confirm 0
debug3: send packet: type 98
debug1: channel 2: setting env LC_ALL = "en_US.UTF-8"
debug2: channel 2: request env confirm 0
debug3: send packet: type 98
debug1: Sending command: uptime
debug2: channel 2: request exec confirm 1
debug3: send packet: type 98
debug3: mux_session_confirm: sending success reply
debug2: channel_input_open_confirmation: channel 2: callback done
debug2: channel 2: open confirm rwindow 0 rmax 32768
debug1: mux_client_request_session: master session id: 2
debug2: channel 2: rcvd adjust 2097152
debug3: receive packet: type 99
debug2: channel_input_status_confirm: type 99 id 2
debug2: exec request accepted on channel 2
ERROR: Session expired or killed. Please login again
debug2: channel 2: rcvd ext data 7
debug2: channel 2: rcvd ext data 16
ERROR: No such command
ERROR: No such command
debug2: channel 2: written 23 to efd 8
debug3: receive packet: type 98
debug1: client_input_channel_req: channel 2 rtype exit-status reply 0
debug3: mux_exit_message: channel 2: exit message, exitval 1
debug3: receive packet: type 98
debug1: client_input_channel_req: channel 2 rtype eow@openssh.com reply 0
debug2: channel 2: rcvd eow
debug2: chan_shutdown_read: channel 2: (i0 o0 sock -1 wfd 6 efd 8 [write])
debug2: channel 2: input open -> closed
debug3: receive packet: type 96
debug2: channel 2: rcvd eof
debug2: channel 2: output open -> drain
debug2: channel 2: obuf empty
debug2: chan_shutdown_write: channel 2: (i3 o1 sock -1 wfd 7 efd 8 [write])
debug2: channel 2: output drain -> closed
debug3: receive packet: type 97
debug2: channel 2: rcvd close
debug3: channel 2: will not send data after close
debug2: channel 2: send close
debug3: send packet: type 97
debug2: channel 2: is dead
debug2: channel 2: gc: notify user
debug3: mux_master_session_cleanup_cb: entering for channel 2
debug2: channel 1: rcvd close
debug2: channel 1: output open -> drain
debug2: chan_shutdown_read: channel 1: (i0 o1 sock 5 wfd 5 efd -1 [closed])
debug2: channel 1: input open -> closed
debug2: channel 2: gc: user detached
debug2: channel 2: is dead
debug2: channel 2: garbage collecting
debug1: channel 2: free: client-session, nchannels 3
debug3: channel 2: status: The following connections are open:
  #1 mux-control (t16 nr0 i3/0 o1/16 e[closed]/0 fd 5/5/-1 sock 5 cc -1 io 0x03/0x00)
  #2 client-session (t4 r0 i3/0 o3/0 e[write]/0 fd -1/-1/8 sock -1 cc -1 io 0x00/0x00)

debug2: channel 1: obuf empty
debug2: chan_shutdown_write: channel 1: (i3 o1 sock 5 wfd 5 efd -1 [closed])
debug2: channel 1: output drain -> closed
debug2: channel 1: is dead (local)
debug2: channel 1: gc: notify user
debug3: mux_master_control_cleanup_cb: entering for channel 1
debug3: mux_client_read_packet: read header failed: Broken pipe
debug2: channel 1: gc: user detached
debug2: channel 1: is dead (local)
debug2: Received exit status from master 1
debug2: channel 1: garbage collecting
debug1: channel 1: free: mux-control, nchannels 2
debug3: channel 1: status: The following connections are open:
  #1 mux-control (t16 nr0 i3/0 o3/0 e[closed]/0 fd 5/5/-1 sock 5 cc -1 io 0x00/0x03)

debug2: set_control_persist_exit_time: schedule exit in 60 seconds

I’m out of my depth here but it seems off that the device reported “Session expired or killed. Please login again” prior to “No such command”?

Was uptime a bad choice for a test command, does the target device have a uptime command? Perhaps try something that it does have? :person_shrugging:

I tried with sshpass ... 10.x.x.42 'uptime'

Should I have tried with sshpass ... 10.x.x.42 'shell uptime' ?

I don’t know, I’m afraid I’m guessing at this point…