2012-04-02 27 views
5

Giriş ağ sınıfımdaki bir proje için C/C++ uygulamasında basit bir SSH istemcisi yazmayı planlıyorum. Bununla birlikte, bunun nasıl yapılacağına dair iyi bir dokümantasyon bulmakta zorlanıyorum. Kapsamlı protokol belirtimi istemiyorum, sadece basit bir rehber. Baska öneri?Basit bir SSH istemcisini nasıl yazarım?

+1

Bu bir ev ödevi projesi olduğundan, kısıtlarınız hakkında daha fazla bilgi verebilir misiniz? Örneğin, mevcut bir ağ kütüphanesini kullanabilir misiniz, yoksa doğrudan soketle ilgili çağrıları mı çağırmalısınız? –

+0

Kütüphaneleri kullanabiliyor musunuz? – sinelaw

+0

Ben de yapmam mümkün, ancak ilk tercihim doğrudan soketle ilgili aramaları çağırmak olacaktır. Ancak, bu benim için çok daha fazla miktarda çalışma gerektiriyorsa, kütüphaneleri kullanmaktan memnunum. – Groppe

cevap

4

Ben OpenSSL project parçası olan libssl ve libcrypto kütüphanelerde bir göz alacaktı. debian tabanlı sistemlerde kullandığınız geliştirme kütüphaneleri alabilirsiniz:

sudo apt-get install libssl-dev 

Ben /usr/share/doc/libssl-dev/demos

EDIT'e altında dosyalara bir göz alacaktı: çalıştırmak Ayrıca şunları yapabilirsiniz read the documentation here ya, yükledikten sonra man ssl

2

Adımlar:

  1. bir açık kaynak müşteriye
  2. yüklemek CLI için anahtarı dahil komut satırı
  3. bir bağlantı yürütmek varolan sunucu tarafı örneğin kimlik bilgilerini almak ayrıntılı günlükler
  4. Her iki tarafın da kabul ettiği bir şifreleme uygulamasında kimliği doğrulanmış bir oturum alma ile ilgili ileri ve geri (C/S iletişim kuralı) iletilerini bulmak için günlükleri kullanın.

stdout'u:

$ 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 
İlgili konular