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?
5
A
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:
- llegar credenciales para una instancia de servidor existente
- instalar un cliente de código abierto
- ejecutar una conexión en la línea de comandos
- incluyendo el CLI, el interruptor de registros detallados
- 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
Cuestiones relacionadas
- 1. Túnel SSH simple en Java
- 2. Cliente SSH para Node.js
- 3. ¿Cómo escribo un servlet simple para Jetty usando Eclipse?
- 4. Implemente un cliente SSH en el iPhone
- 5. Un simple cliente java SOAP
- 6. Java: Cliente SOAP simple
- 7. Cómo hacer que el cliente ssh en Android
- 8. Cliente simple decente SQL Server
- 9. Cliente QT TCP más simple
- 10. Programa Simple Cliente/Servidor Java
- 11. Cómo depurar un túnel ssh
- 12. Dado un archivo WSDL, cree un cliente Java simple
- 13. ¿Cómo escribo una cadena simple en un archivo en el iphone?
- 14. ¿Cómo leo/escribo archivos descomprimidos?
- 15. Cliente Git SSH para Windows y ruta incorrecta para el archivo .ssh/config
- 16. ¿Cuál es la forma más simple de usar SSH Python?
- 17. IntelliJ - Cómo utilizar un ssh llave diferente
- 18. Extensión de Google Chrome Cliente REST simple
- 19. Obteniendo un simple cliente Spring JMS confirme que trabaja
- 20. JSch: Cómo enviar ssh a un servidor usando ssh-keys
- 21. Programación de un cliente IRC (Internet-Relay-Chat) simple
- 22. Apache CXF + Spring: generación de un cliente simple
- 23. ¿Cómo escribo un temporizador en Objective-C?
- 24. ¿Cómo escribo un breve literal en C++?
- 25. ¿Cómo escribo en un OutputStream usando DefaultHttpClient?
- 26. ¿Cómo escribo un dialecto externo para SQLAlchemy?
- 27. ¿Cómo escribo en un archivo oculto?
- 28. ¿Cómo escribo un representante para PyYAML?
- 29. ¿Cómo escribo un complemento de Firefox?
- 30. ¿Cómo escribo un alias para grep -R?
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? –
¿Puede usar bibliotecas? – sinelaw
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