2012-04-02 13 views
5

Estoy planeando escribir un cliente SSH simple en C/C++ para un proyecto en mi clase de red de introducción. Sin embargo, tengo problemas para encontrar una buena documentación sobre cómo hacer esto. No quiero una extensa especificación de protocolo, solo una guía simple. ¿Alguna sugerencia?¿Cómo escribo un cliente SSH simple?

+1

Dado que este es un proyecto de tarea, ¿puede decirnos más sobre sus limitaciones? ¿Puede, por ejemplo, usar una biblioteca de red existente, o debe invocar directamente llamadas relacionadas con el socket? –

+0

¿Puede usar bibliotecas? – sinelaw

+0

Se me permite hacer cualquiera de las dos cosas, pero mi primera preferencia sería invocar las llamadas relacionadas con el socket directamente. Sin embargo, si esto requiriera una cantidad de trabajo mucho mayor de mi parte, estoy contento de usar las bibliotecas. – Groppe

Respuesta

4

Me gustaría echar un vistazo a las bibliotecas libssl y libcrypto que forman parte de la OpenSSL project. En los sistemas basados ​​en Debian puede obtener las bibliotecas de desarrollo usando:

sudo apt-get install libssl-dev 

me gustaría echar un vistazo a los archivos bajo /usr/share/doc/libssl-dev/demos

EDITAR: También, puede read the documentation here o después de la instalación, ejecute man ssl

2

Pasos:

  1. llegar credenciales para una instancia de servidor existente
  2. instalar un cliente de código abierto
  3. ejecutar una conexión en la línea de comandos
  4. incluyendo el CLI, el interruptor de registros detallados
  5. Utilice los registros para inferir los mensajes de ida y vuelta (protocolo C/S) implicados en obtener una sesión autenticada en una implementación de cifrado acordada por ambas partes ..

salida estándar:

$ ssh -vvv myhost.com 
OpenSSH_5.9p1, OpenSSL 0.9.8t 18 Jan 2012 
debug1: Reading configuration data /home/myself/.ssh/config 
debug2: ssh_connect: needpriv 0 
debug1: Connecting to myhost.com [74.99.99.99] port 22. 
debug1: Connection established. 
debug3: Incorrect RSA1 identifier 
debug3: Could not load "/home/myself/.ssh/id_rsa" as a RSA1 public key 
debug1: identity file /home/myself/.ssh/id_rsa type 1 
debug1: identity file /home/myself/.ssh/id_rsa-cert type -1 
debug3: Incorrect RSA1 identifier 
debug3: Could not load "/home/myself/.ssh/id_dsa" as a RSA1 public key 
debug1: identity file /home/myself/.ssh/id_dsa type 2 
debug1: identity file /home/myself/.ssh/id_dsa-cert type -1 
debug1: identity file /home/myself/.ssh/id_ecdsa type -1 
debug1: identity file /home/myself/.ssh/id_ecdsa-cert type -1 
debug1: Remote protocol version 2.0, remote software version OpenSSH_3.5p1 
debug1: match: OpenSSH_3.5p1 pat OpenSSH_3.* 
debug1: Enabling compatibility mode for protocol 2.0 
debug1: Local version string SSH-2.0-OpenSSH_5.9 
debug2: fd 3 setting O_NONBLOCK 
debug3: load_hostkeys: loading entries for host "myhost.com" from file "/home/myself/.ssh/known_hosts" 
debug3: load_hostkeys: found key type RSA in file /home/myself/.ssh/known_hosts:12 
debug3: load_hostkeys: loaded 1 keys 
debug3: order_hostkeyalgs: prefer hostkeyalgs: [email protected],[email protected],ssh-rsa 
debug1: SSH2_MSG_KEXINIT sent 
debug1: SSH2_MSG_KEXINIT received 
debug2: kex_parse_kexinit: ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diff 
ie-hellman-group14-sha1,diffie-hellman-group1-sha1 
debug2: kex_parse_kexinit: [email protected],[email protected],ssh-rsa,[email protected],ecdsa-sha2-nistp384-cert-v 
[email protected],[email protected],[email protected],[email protected],ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa- 
sha2-nistp521,ssh-dss 
debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rij 
[email protected] 
debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rij 
[email protected] 
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,[email protected],hmac-sha2-256,hmac-sha2-256-96,hmac-sha2-512,hmac-sha2-512-96,hmac-ripemd160,[email protected] 
enssh.com,hmac-sha1-96,hmac-md5-96 
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,[email protected],hmac-sha2-256,hmac-sha2-256-96,hmac-sha2-512,hmac-sha2-512-96,hmac-ripemd160,[email protected] 
enssh.com,hmac-sha1-96,hmac-md5-96 
debug2: kex_parse_kexinit: none,[email protected],zlib 
debug2: kex_parse_kexinit: none,[email protected],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-sha1,diffie-hellman-group1-sha1 
debug2: kex_parse_kexinit: ssh-rsa,ssh-dss 
debug2: kex_parse_kexinit: aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour,aes192-cbc,aes256-cbc,[email protected] 
debug2: kex_parse_kexinit: aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour,aes192-cbc,aes256-cbc,[email protected] 
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,hmac-ripemd160,[email protected],hmac-sha1-96,hmac-md5-96 
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,hmac-ripemd160,[email protected],hmac-sha1-96,hmac-md5-96 
debug2: kex_parse_kexinit: none,zlib 
debug2: kex_parse_kexinit: none,zlib 
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-cbc hmac-md5 none 
debug2: mac_setup: found hmac-md5 
debug1: kex: client->server aes128-cbc hmac-md5 none 
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent 
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP 
debug2: dh_gen_key: priv key bits set: 124/256 
debug2: bits set: 510/1024 
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent 
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY 
debug1: Server host key: RSA ac:24:92:03:fd:24:f8:01:a6:86:2a:bf:37:e9:a8:fe 
debug3: load_hostkeys: loading entries for host "myhost.com" from file "/home/myself/.ssh/known_hosts" 
debug3: load_hostkeys: found key type RSA in file /home/myself/.ssh/known_hosts:12 
debug3: load_hostkeys: loaded 1 keys 
debug3: load_hostkeys: loading entries for host "74.99.99.99" from file "/home/myself/.ssh/known_hosts" 
debug3: load_hostkeys: found key type RSA in file /home/myself/.ssh/known_hosts:25 
debug3: load_hostkeys: loaded 1 keys 
debug1: Host 'myhost.com' is known and matches the RSA host key. 
debug1: Found key in /home/myself/.ssh/known_hosts:12 
debug2: bits set: 532/1024 
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 
debug2: set_newkeys: mode 0 
debug1: SSH2_MSG_NEWKEYS received 
debug1: Roaming not allowed by server 
debug1: SSH2_MSG_SERVICE_REQUEST sent 
debug2: service_accept: ssh-userauth 
debug1: SSH2_MSG_SERVICE_ACCEPT received 
debug2: key: /home/myself/.ssh/id_rsa (0x800471d8) 
debug2: key: /home/myself/.ssh/id_dsa (0x80048380) 
debug2: key: /home/myself/.ssh/id_ecdsa (0x0) 
debug3: input_userauth_banner 

debug1: Authentications that can continue: publickey,password 
debug3: start over, passed a different list publickey,password 
debug3: preferred 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 RSA public key: /home/myself/.ssh/id_rsa 
debug3: send_pubkey_test 
debug2: we sent a publickey packet, wait for reply 
debug1: Authentications that can continue: publickey,password 
debug1: Offering DSA public key: /home/myself/.ssh/id_dsa 
debug3: send_pubkey_test 
debug2: we sent a publickey packet, wait for reply 
debug1: Server accepts key: pkalg ssh-dss blen 433 
debug2: input_userauth_pk_ok: fp 15:6c:78:1e:76:02:03:26:2e:53:1a:44:8e:59:97:b1 
debug3: sign_and_send_pubkey: DSA 15:6c:78:1e:76:02:03:26:2e:53:1a:44:8e:59:97:b1 
debug1: read PEM private key done: type DSA 
debug1: Authentication succeeded (publickey). 
Authenticated to myhost.com ([74.99.99.99]:22). 
debug1: channel 0: new [client-session] 
debug3: ssh_session2_open: channel_new: 0 
debug2: channel 0: send open 
debug1: Entering interactive session. 
debug2: callback start 
debug2: client_session2_setup: id 0 
debug2: fd 3 setting TCP_NODELAY 
debug2: channel 0: request pty-req confirm 1 
debug2: channel 0: request shell confirm 1 
debug2: callback done 
debug2: channel 0: open confirm rwindow 0 rmax 32768 
debug2: channel_input_status_confirm: type 99 id 0 
debug2: PTY allocation request accepted on channel 0 
debug2: channel 0: rcvd adjust 131072 
debug2: channel_input_status_confirm: type 99 id 0 
debug2: shell request accepted on channel 0