2012-04-02 4 views
5

मैं अपने परिचय नेटवर्किंग कक्षा में एक परियोजना के लिए सी/सी ++ में एक साधारण एसएसएच क्लाइंट लिखने की योजना बना रहा हूं। मुझे परेशानी हो रही है, हालांकि, यह कैसे करना है इस पर अच्छा दस्तावेज ढूंढने में। मैं व्यापक प्रोटोकॉल विनिर्देश नहीं चाहता, बस एक साधारण गाइड। कोई सुझाव?मैं एक साधारण एसएसएच क्लाइंट कैसे लिखूं?

+1

चूंकि यह एक होमवर्क परियोजना है, क्या आप हमें अपनी बाधाओं के बारे में और बता सकते हैं? क्या आप, उदाहरण के लिए, मौजूदा नेटवर्किंग लाइब्रेरी का उपयोग कर सकते हैं, या आपको सीधे सॉकेट से संबंधित कॉल का आह्वान करना चाहिए? –

+0

क्या आपको पुस्तकालयों का उपयोग करने की अनुमति है? – sinelaw

+0

मुझे या तो करने की इजाजत है, लेकिन मेरी पहली वरीयता सॉकेट से संबंधित कॉल को सीधे आमंत्रित करना होगा। हालांकि, अगर इसके लिए मेरे हिस्से पर बहुत अधिक काम की आवश्यकता होगी, तो मैं पुस्तकालयों का उपयोग करने के लिए सामग्री हूं। – Groppe

उत्तर

4

मैं libssl और libcrypto पुस्तकालयों कि OpenSSL project का हिस्सा हैं पर एक नज़र ले जाएगा। डेबियन-आधारित सिस्टम पर आप का उपयोग कर विकास पुस्तकालयों प्राप्त कर सकते हैं:

sudo apt-get install libssl-dev 

मैं तहत /usr/share/doc/libssl-dev/demos

संपादित फ़ाइलों पर एक नज़र ले जाएगा: इसके अलावा, आप कर सकते हैं read the documentation here या, स्थापित करने के बाद चलाने man ssl

2

कदम:

  1. एक खुला स्रोत ग्राहक
  2. स्थापित कमांड लाइन
  3. CLI, के लिए स्विच पर सहित पर एक कनेक्शन पर अमल के लिए एक मौजूदा सर्वर साइड उदाहरण के लिए क्रेडेंशियल्स प्राप्त verbose लॉग
  4. दोनों तरफ से एक सिफर कार्यान्वयन पर एक प्रमाणित सत्र प्राप्त करने में शामिल बैक और आगे (सी/एस प्रोटोकॉल) संदेशों का अनुमान लगाने के लिए लॉग का उपयोग करें ..

stdout:

$ 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