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?
5
A
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:
- bir açık kaynak müşteriye
- yüklemek CLI için anahtarı dahil komut satırı
- bir bağlantı yürütmek varolan sunucu tarafı örneğin kimlik bilgilerini almak ayrıntılı günlükler
- 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
- 1. Basit SSH JSch
- 2. ssh-KeyScan aynen aşağıda, basit bir Dockerfile var Dockerfile
- 3. Firefox Addon'u nasıl yazarım?
- 4. ASP Dizisini nasıl yazarım?
- 5. jshg için ssh tuşlarının ssh ile nasıl yayınlanacağı ssh
- 6. Atom'a nasıl özel bir komut yazarım?
- 7. VB.NET'te her bir satıra nasıl yorum yazarım?
- 8. Android'de bir .txt dosyasına nasıl yazarım?
- 9. Bir dosyayı diskten silmeden nasıl yazarım?
- 10. Vba'da bir dizeye çift tırnak nasıl yazarım?
- 11. BinaryWriter kullanarak nasıl bir liste yazarım?
- 12. Bir işleve iletilen yineleyicinin türünü nasıl yazarım?
- 13. Alıntıların içine bir metin kutusuna nasıl yazarım?
- 14. Redmine wiki'ye boş bir satır nasıl yazarım?
- 15. JavaScript'te bir uzantı yöntemini nasıl yazarım?
- 16. Herhangi bir şey döndürmeyen bir postgres saklı yordamı nasıl yazarım?
- 17. SSH portunu Python Twisted içinden nasıl gönderebilirim?
- 18. Haskell'de Data.Vector.Unboxed örneğini nasıl yazarım?
- 19. İlkel olmayan türleri nasıl yazarım?
- 20. Yinelemeli anonim işlevleri nasıl yazarım?
- 21. Yasemin'de FileReader testini nasıl yazarım?
- 22. SpecFlow Özelliğinde nasıl yorum yazarım?
- 23. Ruby'nin her_kosunu Clojure'a nasıl yazarım?
- 24. Uzak bir JMS istemcisini GlassFish'e bağlama 3
- 25. SSH
- 26. SSH
- 27. GitKraken'de geçersiz SSH anahtarları
- 28. Dizin sayfasına kod eklemek için temel bir ifadeyi nasıl yazarım?
- 29. nasıl `$ .myplugin.func()` gibi çağrılan bir jQuery eklentisi yazarım?
- 30. Saatlik bir açılır pencere uyarısı verecek olan Applescript'i nasıl yazarım?
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? –
Kütüphaneleri kullanabiliyor musunuz? – sinelaw
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