This commit is contained in:
Patrick Kelley 2025-05-07 14:12:22 -04:00
commit 169641c514
26 changed files with 1602 additions and 0 deletions

2
CODEOWNERS Normal file
View File

@ -0,0 +1,2 @@
# Comment line immediately above ownership line is reserved for related gus information. Please be careful while editing.
#ECCN:Open Source

5
CONTRIBUTING-ARCHIVED.md Normal file
View File

@ -0,0 +1,5 @@
# ARCHIVED
This project is `Archived` and is no longer actively maintained;
We are not accepting contributions or Pull Requests.

12
LICENSE.txt Normal file
View File

@ -0,0 +1,12 @@
Copyright (c) 2018, Salesforce.com, Inc.
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
* Neither the name of Salesforce.com nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

78
README.md Normal file
View File

@ -0,0 +1,78 @@
# "HASSH" - a Profiling Method for SSH Clients and Servers.
<p align="center">
<img src="logo.png" width="850" title="hassh">
</p>
"HASSH" is a network fingerprinting standard which can be used to identify specific Client and Server SSH implementations. The fingerprints can be easily stored, searched and shared in the form of an MD5 fingerprint.
HASSH was invented at Salesforce in 2018. However, the project is no longer being actively maintained by Salesforce. Its original creator, Ben Reardon maintains the active fork at [Corelight](https://github.com/corelight/hassh)
[![License: BSD 3-Clause License](https://img.shields.io/badge/License-BSD%203--Clause-blue.svg)](https://opensource.org/licenses/BSD-3-Clause)
## What can HASSH help with:
- Use in highly controlled, well understood environments, where any fingerprints outside of a known good set are alertable.
- It is possible to detect, control and investigate brute force or Cred Stuffing password attempts at a higher level of granularity than IP Source-which may be impacted by NAT or botnet-like behaviour. The hassh will be a feature of the specific Client software implementation being used, even if the IP is NATed such that it is shared by many other SSH clients.
- Detect covert exfiltration of data within the components of the Client algorithm sets. In this case, a specially coded SSH Client can send data outbound from a trusted to a less trusted environment within a series of SSH_MSG_KEXINIT packets. In a scenario similar to the more known exfiltration via DNS, data could be sent as a series of attempted, but incomplete and unlogged connections to an SSH server controlled by bad actors who can then record, decode and reconstitute these pieces of data into their original form. Until now such attempts - much less the contents of the clear text packets - are not logged even by mature packet analyzers or on end point systems. Detection of this style of exfiltration can now be performed easily by using anomaly detection or alerting on SSH Clients with multiple different hassh
- Use in conjunction with other contextual indicators, for example detect Network discovery and Lateral movement attempts by unusual hassh such as those used by Paramiko, Powershell, Ruby, Meterpreter, Empire.
- Share malicious hassh as Indicators of Compromise.
- Create an additional level of Client application control, for example one could block all Clients from connecting to an SSH server that are outside of an approved known set of hassh values.
- Contribute to Non Repudiation in a Forensic context - at a higher level of abstraction than IPSource - which may be impacted by NAT, or where multiple IP Sources are used.
- Detect Deceptive Applications. Eg a hasshServer value known to belong to the Cowrie/Kippo SSH honeypot server installation, which is purporting to be a common OpenSSH server in the Server String.
- Detect devices having a hassh known to belong to IOT embedded systems. Examples may include cameras, mics, keyloggers, wiretaps that could be easily be hidden from view and communicating quietly over encrypted channels back to a control server.
## How does HASSH work:
"hassh" and "hasshServer" are MD5 hashes constructed from a specific set of algorithms that are supported by various SSH Client and Server Applications. These algorithms are exchanged after the initial TCP three-way handshake as clear-text packets known as "SSH_MSG_KEXINIT" messages, and are an integral part of the setup of the final encrypted SSH channel.
The existence and ordering of these algorithms is unique enough such that it can be used as a fingerprint to help identify the underlying Client and Server application or unique implementation, regardless of higher level ostensible identifiers such as "Client" or "Server" strings.
<p align="center">
<img src="packet_sequence.png" width="700" title="Packet sequence">
</p>
## Example 1: Client Fingerprinting - the "hassh"
For the "Cyberduck" SFTP client (specifically SSH-2.0-Cyberduck/6.7.1.28683 (Mac OS X/10.13.6) (x86_64)" , the set of supported algorithms is as follows :
|Function|Algorithms seen in SSH_MSG_KEXINIT packets|
| ------------- | ------------- |
|Key Exchange methods|```curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group14-sha256,diffie-hellman-group15-sha512,diffie-hellman-group16-sha512,diffie-hellman-group17-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256@ssh.com,diffie-hellman-group15-sha256,diffie-hellman-group15-sha256@ssh.com,diffie-hellman-group15-sha384@ssh.com,diffie-hellman-group16-sha256,diffie-hellman-group16-sha384@ssh.com,diffie-hellman-group16-sha512@ssh.com,diffie-hellman-group18-sha512@ssh.com```|
|Encryption| ```aes128-cbc,aes128-ctr,aes192-cbc,aes192-ctr,aes256-cbc,aes256-ctr,blowfish-cbc,blowfish-ctr,cast128-cbc,cast128-ctr,idea-cbc,idea-ctr,serpent128-cbc,serpent128-ctr,serpent192-cbc,serpent192-ctr,serpent256-cbc,serpent256-ctr,3des-cbc,3des-ctr,twofish128-cbc,twofish128-ctr,twofish192-cbc,twofish192-ctr,twofish256-cbc,twofish256-ctr,twofish-cbc,arcfour,arcfour128,arcfour256```|
|Message Authentication|```hmac-sha1,hmac-sha1-96,hmac-md5,hmac-md5-96,hmac-sha2-256,hmac-sha2-512```|
|Compression|```zlib@openssh.com,zlib,none```|
Concatenating these algorithms together with a delimiter of ";" gives the hasshAlgorithms, which is useful for detailed analysis.
```curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group14-sha256,diffie-hellman-group15-sha512,diffie-hellman-group16-sha512,diffie-hellman-group17-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256@ssh.com,diffie-hellman-group15-sha256,diffie-hellman-group15-sha256@ssh.com,diffie-hellman-group15-sha384@ssh.com,diffie-hellman-group16-sha256,diffie-hellman-group16-sha384@ssh.com,diffie-hellman-group16-sha512@ssh.com,diffie-hellman-group18-sha512@ssh.com;aes128-cbc,aes128-ctr,aes192-cbc,aes192-ctr,aes256-cbc,aes256-ctr,blowfish-cbc,blowfish-ctr,cast128-cbc,cast128-ctr,idea-cbc,idea-ctr,serpent128-cbc,serpent128-ctr,serpent192-cbc,serpent192-ctr,serpent256-cbc,serpent256-ctr,3des-cbc,3des-ctr,twofish128-cbc,twofish128-ctr,twofish192-cbc,twofish192-ctr,twofish256-cbc,twofish256-ctr,twofish-cbc,arcfour,arcfour128,arcfour256;hmac-sha1,hmac-sha1-96,hmac-md5,hmac-md5-96,hmac-sha2-256,hmac-sha2-512;zlib@openssh.com,zlib,none```
Finally the hassh is simply the MD5 of hasshAlgorithms, and is used for storage, searching and sharing. Some examples follow:
```de30354b88bae4c2810426614e1b6976``` Powershell Renci.SshNet.SshClient.0.0.1 (used by Empire exploit modules)
```fafc45381bfde997b6305c4e1600f1bf``` Ruby/Net::SSH_5.0.2 x86_64-linux (used by Metasploit exploit modules)
```b5752e36ba6c5979a575e43178908adf``` Python Paramiko_2.4.1 (used by Metasploit exploit modules)
```16f898dd8ed8279e1055350b4e20666c``` Dropbear_2012.55 (used in IOT embedded systems)
```8a8ae540028bf433cd68356c1b9e8d5b``` CyberDuck Version 6.7.1 (28683)
```06046964c022c6407d15a27b12a6a4fb``` OpenSSH_7.7p1 Ubuntu-4
## Example 2: Server Fingerprinting - the "hasshServer"
For a standard SSH-2.0-OpenSSH_5.3 SSH server, the set of supported algorithms is as follows :
|Function|Algorithms seen in SSH_MSG_KEXINIT packets|
| ------------- | ------------- |
|Key Exchange methods| ```diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1```|
|Encryption| ```aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se```|
|Message Authentication|```hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96```|
|Compression|```none,zlib@openssh.com```|
Concatenating these algorithms together with a delimiter of ";" gives the hasshServerAlgorithms, which is useful for detailed analysis.
```diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1;aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se;hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96;none,zlib@openssh.com```
Finally the hasshServer is simply the MD5 of hasshServerAlgorithms, some examples follow:
```c1c596caaeb93c566b8ecf3cae9b5a9e``` SSH-2.0-dropbear_2016.74
```d93f46d063c4382b6232a4d77db532b2``` SSH-2.0-dropbear_2016.72
```2dd9a9b3dbebfaeec8b8aabd689e75d2``` SSH-2.0-AWSCodeCommit
```696e7f84ac571fdf8fa5073e64ee2dc8``` SSH-2.0-FTP
## References:
- [RFC4253 The Secure Shell (SSH) Transport Layer Protocol](https://www.ietf.org/rfc/rfc4253.txt)
- [Salesforce Engineering blog](https://engineering.salesforce.com/open-sourcing-hassh-abed3ae5044c)
## Credits:
hassh and hasshServer were conceived and developed by [Ben Reardon](mailto:breardon@salesforce.com) ([@benreardon](https://twitter.com/@benreardon)) within the Detection Cloud Team at Salesforce, with inspiration and contributions from [Adel Karimi](mailto:akarimishiraz@salesforce.com) (@0x4d31) and the [JA3 crew](https://github.com/salesforce/ja3/) crew:[John B. Althouse](mailto:jalthouse@salesforce.com) , [Jeff Atkinson](mailto:jatkinson@salesforce.com) and [Josh Atkins](mailto:j.atkins@salesforce.com)

BIN
logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

BIN
packet_sequence.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

BIN
python/.DS_Store vendored Normal file

Binary file not shown.

19
python/Pipfile Normal file
View File

@ -0,0 +1,19 @@
[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true
name = "pypi"
[dev-packages]
[packages]
pyshark = "==0.4.1"
[requires]
python_version = "3.7"

126
python/Pipfile.lock generated Normal file
View File

@ -0,0 +1,126 @@
{
"_meta": {
"hash": {
"sha256": "2218728fac5a77bdbcf653ab0748df2b73086d0f1474afb327604592aa61b1b3"
},
"pipfile-spec": 6,
"requires": {
"python_version": "3.7"
},
"sources": [
{
"name": "pypi",
"url": "https://pypi.python.org/simple",
"verify_ssl": true
}
]
},
"default": {
"logbook": {
"hashes": [
"sha256:0cf2cdbfb65a03b5987d19109dacad13417809dcf697f66e1a7084fb21744ea9",
"sha256:2dc85f1510533fddb481e97677bb7bca913560862734c0b3b289bfed04f78c92",
"sha256:56ee54c11df3377314cedcd6507638f015b4b88c0238c2e01b5eb44fd3a6ad1b",
"sha256:66f454ada0f56eae43066f604a222b09893f98c1adc18df169710761b8f32fe8",
"sha256:7c533eb728b3d220b1b5414ba4635292d149d79f74f6973b4aa744c850ca944a",
"sha256:8f76a2e7b1f72595f753228732f81ce342caf03babc3fed6bbdcf366f2f20f18",
"sha256:94e2e11ff3c2304b0d09a36c6208e5ae756eb948b210e5cbd63cd8d27f911542",
"sha256:97fee1bd9605f76335b169430ed65e15e457a844b2121bd1d90a08cf7e30aba0",
"sha256:e18f7422214b1cf0240c56f884fd9c9b4ff9d0da2eabca9abccba56df7222f66"
],
"version": "==1.5.3"
},
"lxml": {
"hashes": [
"sha256:04da965dfebb5dac2619cb90fcf93efdb35b3c6994fea58a157a834f2f94b318",
"sha256:0538747a9d7827ce3e16a8fdd201a99e661c7dee3c96c885d8ecba3c35d1032c",
"sha256:0645e934e940107e2fdbe7c5b6fb8ec6232444260752598bc4d09511bd056c0b",
"sha256:079b68f197c796e42aa80b1f739f058dcee796dc725cc9a1be0cdb08fc45b000",
"sha256:0f3f0059891d3254c7b5fb935330d6db38d6519ecd238ca4fce93c234b4a0f73",
"sha256:10d2017f9150248563bb579cd0d07c61c58da85c922b780060dcc9a3aa9f432d",
"sha256:1355755b62c28950f9ce123c7a41460ed9743c699905cbe664a5bcc5c9c7c7fb",
"sha256:13c90064b224e10c14dcdf8086688d3f0e612db53766e7478d7754703295c7c8",
"sha256:1423631e3d51008871299525b541413c9b6c6423593e89f9c4cfbe8460afc0a2",
"sha256:1436cf0063bba7888e43f1ba8d58824f085410ea2025befe81150aceb123e345",
"sha256:1a7c59c6ffd6ef5db362b798f350e24ab2cfa5700d53ac6681918f314a4d3b94",
"sha256:1e1cf47774373777936c5aabad489fef7b1c087dcd1f426b621fda9dcc12994e",
"sha256:206a51077773c6c5d2ce1991327cda719063a47adc02bd703c56a662cdb6c58b",
"sha256:21fb3d24ab430fc538a96e9fbb9b150029914805d551deeac7d7822f64631dfc",
"sha256:27e590352c76156f50f538dbcebd1925317a0f70540f7dc8c97d2931c595783a",
"sha256:287605bede6bd36e930577c5925fcea17cb30453d96a7b4c63c14a257118dbb9",
"sha256:2aaf6a0a6465d39b5ca69688fce82d20088c1838534982996ec46633dc7ad6cc",
"sha256:32a73c53783becdb7eaf75a2a1525ea8e49379fb7248c3eeefb9412123536387",
"sha256:41fb58868b816c202e8881fd0f179a4644ce6e7cbbb248ef0283a34b73ec73bb",
"sha256:4780677767dd52b99f0af1f123bc2c22873d30b474aa0e2fc3fe5e02217687c7",
"sha256:4878e667ebabe9b65e785ac8da4d48886fe81193a84bbe49f12acff8f7a383a4",
"sha256:487c8e61d7acc50b8be82bda8c8d21d20e133c3cbf41bd8ad7eb1aaeb3f07c97",
"sha256:4beea0f31491bc086991b97517b9683e5cfb369205dac0148ef685ac12a20a67",
"sha256:4cfbe42c686f33944e12f45a27d25a492cc0e43e1dc1da5d6a87cbcaf2e95627",
"sha256:4d5bae0a37af799207140652a700f21a85946f107a199bcb06720b13a4f1f0b7",
"sha256:4e285b5f2bf321fc0857b491b5028c5f276ec0c873b985d58d7748ece1d770dd",
"sha256:57e4d637258703d14171b54203fd6822fda218c6c2658a7d30816b10995f29f3",
"sha256:5974895115737a74a00b321e339b9c3f45c20275d226398ae79ac008d908bff7",
"sha256:5ef87fca280fb15342726bd5f980f6faf8b84a5287fcc2d4962ea8af88b35130",
"sha256:603a464c2e67d8a546ddaa206d98e3246e5db05594b97db844c2f0a1af37cf5b",
"sha256:6653071f4f9bac46fbc30f3c7838b0e9063ee335908c5d61fb7a4a86c8fd2036",
"sha256:6ca2264f341dd81e41f3fffecec6e446aa2121e0b8d026fb5130e02de1402785",
"sha256:6d279033bf614953c3fc4a0aa9ac33a21e8044ca72d4fa8b9273fe75359d5cca",
"sha256:6d949f53ad4fc7cf02c44d6678e7ff05ec5f5552b235b9e136bd52e9bf730b91",
"sha256:6daa662aba22ef3258934105be2dd9afa5bb45748f4f702a3b39a5bf53a1f4dc",
"sha256:6eafc048ea3f1b3c136c71a86db393be36b5b3d9c87b1c25204e7d397cee9536",
"sha256:830c88747dce8a3e7525defa68afd742b4580df6aa2fdd6f0855481e3994d391",
"sha256:86e92728ef3fc842c50a5cb1d5ba2bc66db7da08a7af53fb3da79e202d1b2cd3",
"sha256:8caf4d16b31961e964c62194ea3e26a0e9561cdf72eecb1781458b67ec83423d",
"sha256:8d1a92d8e90b286d491e5626af53afef2ba04da33e82e30744795c71880eaa21",
"sha256:8f0a4d179c9a941eb80c3a63cdb495e539e064f8054230844dcf2fcb812b71d3",
"sha256:9232b09f5efee6a495a99ae6824881940d6447debe272ea400c02e3b68aad85d",
"sha256:927a9dd016d6033bc12e0bf5dee1dde140235fc8d0d51099353c76081c03dc29",
"sha256:93e414e3206779ef41e5ff2448067213febf260ba747fc65389a3ddaa3fb8715",
"sha256:98cafc618614d72b02185ac583c6f7796202062c41d2eeecdf07820bad3295ed",
"sha256:9c3a88d20e4fe4a2a4a84bf439a5ac9c9aba400b85244c63a1ab7088f85d9d25",
"sha256:9f36de4cd0c262dd9927886cc2305aa3f2210db437aa4fed3fb4940b8bf4592c",
"sha256:a60f90bba4c37962cbf210f0188ecca87daafdf60271f4c6948606e4dabf8785",
"sha256:a614e4afed58c14254e67862456d212c4dcceebab2eaa44d627c2ca04bf86837",
"sha256:ae06c1e4bc60ee076292e582a7512f304abdf6c70db59b56745cca1684f875a4",
"sha256:b122a188cd292c4d2fcd78d04f863b789ef43aa129b233d7c9004de08693728b",
"sha256:b570da8cd0012f4af9fa76a5635cd31f707473e65a5a335b186069d5c7121ff2",
"sha256:bcaa1c495ce623966d9fc8a187da80082334236a2a1c7e141763ffaf7a405067",
"sha256:bd34f6d1810d9354dc7e35158aa6cc33456be7706df4420819af6ed966e85448",
"sha256:be9eb06489bc975c38706902cbc6888f39e946b81383abc2838d186f0e8b6a9d",
"sha256:c4b2e0559b68455c085fb0f6178e9752c4be3bba104d6e881eb5573b399d1eb2",
"sha256:c62e8dd9754b7debda0c5ba59d34509c4688f853588d75b53c3791983faa96fc",
"sha256:c852b1530083a620cb0de5f3cd6826f19862bafeaf77586f1aef326e49d95f0c",
"sha256:d9fc0bf3ff86c17348dfc5d322f627d78273eba545db865c3cd14b3f19e57fa5",
"sha256:dad7b164905d3e534883281c050180afcf1e230c3d4a54e8038aa5cfcf312b84",
"sha256:e5f66bdf0976ec667fc4594d2812a00b07ed14d1b44259d19a41ae3fff99f2b8",
"sha256:e8f0c9d65da595cfe91713bc1222af9ecabd37971762cb830dea2fc3b3bb2acf",
"sha256:edffbe3c510d8f4bf8640e02ca019e48a9b72357318383ca60e3330c23aaffc7",
"sha256:eea5d6443b093e1545ad0210e6cf27f920482bfcf5c77cdc8596aec73523bb7e",
"sha256:ef72013e20dd5ba86a8ae1aed7f56f31d3374189aa8b433e7b12ad182c0d2dfb",
"sha256:f05251bbc2145349b8d0b77c0d4e5f3b228418807b1ee27cefb11f69ed3d233b",
"sha256:f1be258c4d3dc609e654a1dc59d37b17d7fef05df912c01fc2e15eb43a9735f3",
"sha256:f9ced82717c7ec65a67667bb05865ffe38af0e835cdd78728f1209c8fffe0cad",
"sha256:fe17d10b97fdf58155f858606bddb4e037b805a60ae023c009f760d8361a4eb8",
"sha256:fe749b052bb7233fe5d072fcb549221a8cb1a16725c47c37e42b0b9cb3ff2c3f"
],
"index": "pypi",
"version": "==4.9.1"
},
"py": {
"hashes": [
"sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719",
"sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'",
"version": "==1.11.0"
},
"pyshark": {
"hashes": [
"sha256:8965e8e2da50a7fe97f80b0b8db676a0bfc131aa8f4d6017e6b0cedc46b11288"
],
"index": "pypi",
"version": "==0.4.1"
}
},
"develop": {}
}

158
python/README.md Normal file
View File

@ -0,0 +1,158 @@
# HASSH.py
[![License: BSD 3-Clause License](https://img.shields.io/badge/License-BSD%203--Clause-blue.svg)](https://opensource.org/licenses/BSD-3-Clause)
HASSH is a method for creating SSH Client and Server fingerprints. This python script generates HASSH fingerprints from input PCAP files and live network traffic.
You can use [hasshGen.py](hasshGen/) to automate building docker images with different SSH clients/versions for generating HASSH fingerprints. As a demonstration we created a list ([sshClient_list](hasshGen/sshClient_list)) containing 49 different version of OpenSSH, Pythons paramiko and Dropbear SSH clients and generated a database of HASSH fingerprints in [JSON](hasshGen/hassh_fingerprints.json) and [CSV](hasshGen/hassh_fingerprints.csv) formats.
## Getting Started
1. Install Tshark.
> `apt-get install tshark` on Debian/Ubuntu or `yum install wireshark` on Centos 7
2. Install Pipenv:
> `pip3 install pipenv`
3. Install dependencies:
> `pipenv install`
4. Test:
To activate the virtualenv, run pipenv shell:
```
$ pipenv shell
(python-ZnElGiuE) bash-3.2$ python3 hassh.py -h
```
Alternatively, run a command inside the virtualenv with pipenv run:
```
$ pipenv run python3 hassh.py -h
```
Output:
```
usage: hassh.py [-h] [-r READ_FILE] [-d READ_DIRECTORY] [-i INTERFACE]
[-fp {client,server}] [-da DECODE_AS] [-f BPF_FILTER]
[-l {json,csv}] [-o OUTPUT_FILE] [-w WRITE_PCAP] [-p]
A python script for extracting HASSH fingerprints
optional arguments:
-h, --help show this help message and exit
-r READ_FILE, --read_file READ_FILE
pcap file to process
-d READ_DIRECTORY, --read_directory READ_DIRECTORY
directory of pcap files to process
-i INTERFACE, --interface INTERFACE
listen on interface
-fp {client,server}, --fingerprint {client,server}
client or server fingerprint. Default: all
-da DECODE_AS, --decode_as DECODE_AS
a dictionary of {decode_criterion_string:
decode_as_protocol} that are used to tell tshark to
decode protocols in situations it wouldn't usually.
Default: {'tcp.port==2222': 'ssh'}.
-f BPF_FILTER, --bpf_filter BPF_FILTER
BPF capture filter to use (for live capture only).
Default: 'tcp port 22 or tcp port 2222'
-l {json,csv}, --log_format {json,csv}
specify the output log format (json/csv)
-o OUTPUT_FILE, --output_file OUTPUT_FILE
specify the output log file. Default: hassh.log
-w WRITE_PCAP, --write_pcap WRITE_PCAP
save the live captured packets to this file
-p, --print_output print the output
```
## Usage
* Live network traffic capture:
```
$ python3 hassh.py -i eth0 -l json -o hassh.json --print
```
Output:
```
[+] Server SSH_MSG_KEXINIT detected
[ 192.1.2.3:22 -> 10.1.2.3:52068 ]
[-] Identification String: SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.4
[-] hasshServer: d43d91bc39d5aaed819ad9f6b57b7348
[-] hasshServer Algorithms: curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com
[+] Client SSH_MSG_KEXINIT detected
[ 10.1.2.3:52068 -> 192.1.2.3:22 ]
[-] Identification String: SSH-2.0-OpenSSH_7.6
[-] hassh: 06046964c022c6407d15a27b12a6a4fb
[-] hassh Algorithms: curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com,zlib
```
JSON Output:
```javascript
{
"timestamp": "2018-09-04T18:57:03.644663",
"sourceIp": "10.1.2.3",
"destinationIp": "192.1.2.3",
"sourcePort": "52068",
"destinationPort": "22",
"client": "SSH-2.0-OpenSSH_7.6",
"hassh": "06046964c022c6407d15a27b12a6a4fb",
"hasshAlgorithms": "curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com,zlib",
"hasshVersion": "1.0",
"ckex": "curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c",
"ceacts": "chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com",
"cmacts": "umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1",
"ccacts": "none,zlib@openssh.com,zlib",
"clcts": "[Empty]",
"clstc": "[Empty]",
"ceastc": "chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com",
"cmastc": "umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1",
"ccastc": "none,zlib@openssh.com,zlib",
"cshka": "ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa"
}
{
"timestamp": "2018-09-04T18:57:04.534235",
"eventType": "retransmission",
"eventMessage": "This packet is a (suspected) retransmission",
"sourceIp": "10.1.2.3",
"destinationIp": "192.1.2.3",
"sourcePort": "52068",
"destinationPort": "22"
}
```
* Reading from an input PCAP file (```-r pcapfile.pcap```) or a directory of PCAP files (```-d pcap_dir/```):
```
$ python3 hassh.py -r traffic.pcap -l csv -o hassh.csv --print
```
CSV Output:
```
timestamp,sourceIp,destinationIp,sourcePort,destinationPort,hasshType,identificationString,hassh,hasshVersion,hasshAlgorithms,kexAlgs,encAlgs,macAlgs,cmpAlgs
2018-09-04T18:57:03.642572,192.1.2.3,10.1.2.3,22,52068,server,"SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.4",d43d91bc39d5aaed819ad9f6b57b7348,1.0,"curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com","curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1","chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com","umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1","none,zlib@openssh.com"
2018-09-04T18:57:03.644663,10.1.2.3,192.1.2.3,52068,22,client,"SSH-2.0-OpenSSH_7.6",06046964c022c6407d15a27b12a6a4fb,1.0,"curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com,zlib","curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c","chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com","umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1","none,zlib@openssh.com,zlib"
```
## Docker
A dockerized version of hassh.py can be used to extract HASSH fingerprints from input PCAP files and live network traffic.
Build the docker image using Dockerfile:
```
$ docker build -t hassh:latest .
```
* Reading from input PCAP files:
You can mount your host ~/pcap dir to copy pcap files to the container and also keep the logs on your host:
```
$ docker run -v ~/pcap:/tmp/ -it hassh:latest -d /tmp/ -l json -o /tmp/log.json
```
* Live network traffic capture:
```
$ docker run --net=host -it hassh:latest -i any --print
```
Note: According to Docker's [docs](https://docs.docker.com/network/host/), the host networking driver only works on Linux hosts, and is not supported on Docker for Mac, Docker for Windows, or Docker EE for Windows Server.

27
python/docker/Dockerfile Normal file
View File

@ -0,0 +1,27 @@
# Copyright (c) 2018, salesforce.com, inc.
# All rights reserved.
# Licensed under the BSD 3-Clause license.
# For full license text, see the LICENSE file in the repo root
# or https://opensource.org/licenses/BSD-3-Clause
#
# A dockerized version of hassh.py can be used to extract HASSH fingerprints from input PCAP files and live network traffic.
#
# Build the docker image using Dockerfile:
# $ docker build -t hassh:latest .
# - Reading from input PCAP files:
# You can mount your host ~/pcap dir to copy pcap files to the container and also keep the logs on your host:
# $ docker run -v ~/pcap:/tmp/ -it hassh:latest -d /tmp/ -l json -o /tmp/log.json
# - Live network traffic capture:
# $ docker run --net=host -it hassh:latest -i any --print
# Note: According to Docker's docs, the host networking driver only works on Linux hosts, and is not supported on Docker for Mac, Docker for Windows, or Docker EE for Windows Server.
FROM alpine:latest
MAINTAINER Adel Karimi (@0x4d31)
ENV DEBIAN_FRONTEND noninteractive
RUN apk --no-cache add python3 gcc \
py3-pip py3-lxml tshark \
&& pip3 install pyshark
WORKDIR /opt/hassh
ADD https://raw.githubusercontent.com/salesforce/hassh/master/python/hassh.py .
ENTRYPOINT ["python3","hassh.py"]
CMD ["-h"]

428
python/hassh.py Normal file
View File

@ -0,0 +1,428 @@
#!/usr/bin/env python3
# Copyright (c) 2018, salesforce.com, inc.
# All rights reserved.
# Licensed under the BSD 3-Clause license.
# For full license text, see the LICENSE file in the repo root
# or https://opensource.org/licenses/BSD-3-Clause
import argparse
import pyshark
import os
import json
import logging
import textwrap
from hashlib import md5
__author__ = "Adel '0x4D31' Karimi"
__email__ = "akarimishiraz@salesforce.com"
__version__ = "1.1"
__copyright__ = "Copyright (c) 2018, salesforce.com, inc."
__license__ = "BSD 3-Clause License"
__credits__ = ["Ben Reardon", "Adel Karimi", "John B. Althouse",
"Jeff Atkinson", "Josh Atkins"]
HASSH_VERSION = '1.0'
CAP_BPF_FILTER = 'tcp port 22 or tcp port 2222'
DECODE_AS = {'tcp.port==2222': 'ssh'}
protocol_dict = {}
class color:
CL1 = '\u001b[38;5;81m'
CL2 = '\u001b[38;5;220m'
CL3 = '\u001b[38;5;181m'
CL4 = '\u001b[38;5;208m'
END = '\033[0m'
def process_packet(packet, logf, fingerprint, pout):
logger = logging.getLogger()
global protocol_dict
if not packet.highest_layer == 'SSH':
return
# Extract SSH identification string and correlate with KEXINIT msg
if 'protocol' in packet.ssh.field_names:
protocol = packet.ssh.protocol
srcip = packet.ip.src
dstip = packet.ip.dst
sport = packet.tcp.srcport
dport = packet.tcp.srcport
key = '{}:{}_{}:{}'.format(srcip, sport, dstip, dport)
protocol_dict[key] = protocol
if 'message_code' not in packet.ssh.field_names:
return
if packet.ssh.message_code != '20':
return
if ("analysis_retransmission" in packet.tcp.field_names or
"analysis_spurious_retransmission" in packet.tcp.field_names):
event = event_log(packet, event="retransmission")
if logf == 'json':
logger.info(json.dumps(event))
return
# Client HASSH
if ((fingerprint == 'client' or fingerprint == 'all')
and int(packet.tcp.srcport) > int(packet.tcp.dstport)):
record = client_hassh(packet)
if logf == 'json':
logger.info(json.dumps(record))
elif logf == 'csv':
csv_record = csv_logging(record)
logger.info(csv_record)
# Print the result
if not pout:
return
tmp = textwrap.dedent("""\
[+] Client SSH_MSG_KEXINIT detected
{cl1}[ {sip}:{sport} -> {dip}:{dport} ]{cl1e}
[-] Identification String: {cl2}{proto}{cl2e}
[-] hassh: {cl2}{hassh}{cl2e}
[-] hassh Algorithms: {cl3}{hasshv}{cl3e}""")
tmp = tmp.format(
cl1=color.CL1,
sip=record['sourceIp'],
sport=record['sourcePort'],
dip=record['destinationIp'],
dport=record['destinationPort'],
cl1e=color.END,
cl2=color.CL2,
hassh=record['hassh'],
cl2e=color.END,
cl3=color.CL3,
hasshv=record['hasshAlgorithms'],
cl3e=color.END,
proto=record['client'])
print(tmp)
# Server HASSH
elif ((fingerprint == 'server' or fingerprint == 'all')
and int(packet.tcp.srcport) < int(packet.tcp.dstport)):
record = server_hassh(packet)
if logf == 'json':
logger.info(json.dumps(record))
elif logf == 'csv':
csv_record = csv_logging(record)
logger.info(csv_record)
# Print the result
if not pout:
return
tmp = textwrap.dedent("""\
[+] Server SSH_MSG_KEXINIT detected
{cl1}[ {sip}:{sport} -> {dip}:{dport} ]{cl1e}
[-] Identification String: {cl4}{proto}{cl4e}
[-] hasshServer: {cl4}{hasshs}{cl4e}
[-] hasshServer Algorithms: {cl3}{hasshsv}{cl3e}""")
tmp = tmp.format(
cl1=color.CL1,
sip=record['sourceIp'],
sport=record['sourcePort'],
dip=record['destinationIp'],
dport=record['destinationPort'],
cl1e=color.END,
cl4=color.CL4,
hasshs=record['hasshServer'],
cl4e=color.END,
cl3=color.CL3,
hasshsv=record['hasshServerAlgorithms'],
cl3e=color.END,
proto=record['server'])
print(tmp)
def event_log(packet, event):
"""log the anomalous packets"""
if event == "retransmission":
event_message = "This packet is a (suspected) retransmission"
# Report the event (only for JSON output)
msg = {"timestamp": packet.sniff_time.isoformat(),
"eventType": event,
"eventMessage": event_message,
"sourceIp": packet.ip.src,
"destinationIp": packet.ip.dst,
"sourcePort": packet.tcp.srcport,
"destinationPort": packet.tcp.dstport}
return msg
def client_hassh(packet):
"""returns HASSH (i.e. SSH Client Fingerprint)
HASSH = md5(KEX;EACTS;MACTS;CACTS)
"""
srcip = packet.ip.src
dstip = packet.ip.dst
sport = packet.tcp.srcport
dport = packet.tcp.srcport
protocol = None
key = '{}:{}_{}:{}'.format(srcip, sport, dstip, dport)
if key in protocol_dict:
protocol = protocol_dict[key]
# hassh fields
ckex = ceacts = cmacts = ccacts = ""
if 'kex_algorithms' in packet.ssh.field_names:
ckex = packet.ssh.kex_algorithms
if 'encryption_algorithms_client_to_server' in packet.ssh.field_names:
ceacts = packet.ssh.encryption_algorithms_client_to_server
if 'mac_algorithms_client_to_server' in packet.ssh.field_names:
cmacts = packet.ssh.mac_algorithms_client_to_server
if 'compression_algorithms_client_to_server' in packet.ssh.field_names:
ccacts = packet.ssh.compression_algorithms_client_to_server
# Log other kexinit fields (only in JSON)
clcts = clstc = ceastc = cmastc = ccastc = cshka = ""
if 'languages_client_to_server' in packet.ssh.field_names:
clcts = packet.ssh.languages_client_to_server
if 'languages_server_to_client' in packet.ssh.field_names:
clstc = packet.ssh.languages_server_to_client
if 'encryption_algorithms_server_to_client' in packet.ssh.field_names:
ceastc = packet.ssh.encryption_algorithms_server_to_client
if 'mac_algorithms_server_to_client' in packet.ssh.field_names:
cmastc = packet.ssh.mac_algorithms_server_to_client
if 'compression_algorithms_server_to_client' in packet.ssh.field_names:
ccastc = packet.ssh.compression_algorithms_server_to_client
if 'server_host_key_algorithms' in packet.ssh.field_names:
cshka = packet.ssh.server_host_key_algorithms
# Create hassh
hassh_str = ';'.join([ckex, ceacts, cmacts, ccacts])
hassh = md5(hassh_str.encode()).hexdigest()
record = {"timestamp": packet.sniff_time.isoformat(),
"sourceIp": packet.ip.src,
"destinationIp": packet.ip.dst,
"sourcePort": packet.tcp.srcport,
"destinationPort": packet.tcp.dstport,
"client": protocol,
"hassh": hassh,
"hasshAlgorithms": hassh_str,
"hasshVersion": HASSH_VERSION,
"ckex": ckex,
"ceacts": ceacts,
"cmacts": cmacts,
"ccacts": ccacts,
"clcts": clcts,
"clstc": clstc,
"ceastc": ceastc,
"cmastc": cmastc,
"ccastc": ccastc,
"cshka": cshka}
return record
def server_hassh(packet):
"""returns HASSHServer (i.e. SSH Server Fingerprint)
HASSHServer = md5(KEX;EASTC;MASTC;CASTC)
"""
srcip = packet.ip.src
dstip = packet.ip.dst
sport = packet.tcp.srcport
dport = packet.tcp.srcport
protocol = None
key = '{}:{}_{}:{}'.format(srcip, sport, dstip, dport)
if key in protocol_dict:
protocol = protocol_dict[key]
# hasshServer fields
skex = seastc = smastc = scastc = ""
if 'kex_algorithms' in packet.ssh.field_names:
skex = packet.ssh.kex_algorithms
if 'encryption_algorithms_server_to_client' in packet.ssh.field_names:
seastc = packet.ssh.encryption_algorithms_server_to_client
if 'mac_algorithms_server_to_client' in packet.ssh.field_names:
smastc = packet.ssh.mac_algorithms_server_to_client
if 'compression_algorithms_server_to_client' in packet.ssh.field_names:
scastc = packet.ssh.compression_algorithms_server_to_client
# Log other kexinit fields (only in JSON)
slcts = slstc = seacts = smacts = scacts = sshka = ""
if 'languages_client_to_server' in packet.ssh.field_names:
slcts = packet.ssh.languages_client_to_server
if 'languages_server_to_client' in packet.ssh.field_names:
slstc = packet.ssh.languages_server_to_client
if 'encryption_algorithms_client_to_server' in packet.ssh.field_names:
seacts = packet.ssh.encryption_algorithms_client_to_server
if 'mac_algorithms_client_to_server' in packet.ssh.field_names:
smacts = packet.ssh.mac_algorithms_client_to_server
if 'compression_algorithms_client_to_server' in packet.ssh.field_names:
scacts = packet.ssh.compression_algorithms_client_to_server
if 'server_host_key_algorithms' in packet.ssh.field_names:
sshka = packet.ssh.server_host_key_algorithms
# Create hasshServer
hasshs_str = ';'.join([skex, seastc, smastc, scastc])
hasshs = md5(hasshs_str.encode()).hexdigest()
record = {"timestamp": packet.sniff_time.isoformat(),
"sourceIp": packet.ip.src,
"destinationIp": packet.ip.dst,
"sourcePort": packet.tcp.srcport,
"destinationPort": packet.tcp.dstport,
"server": protocol,
"hasshServer": hasshs,
"hasshServerAlgorithms": hasshs_str,
"hasshVersion": HASSH_VERSION,
"skex": skex,
"seastc": seastc,
"smastc": smastc,
"scastc": scastc,
"slcts": slcts,
"slstc": slstc,
"seacts": seacts,
"smacts": smacts,
"scacts": scacts,
"sshka": sshka}
return record
def csv_logging(record):
"""generate output in csv format"""
csv_record = ('{ts},{si},{di},{sp},{dp},{t},"{p}",{h},{v},"{ha}",'
'"{k}","{e}","{m}","{c}"')
if 'hassh' in record:
hasshType = 'client'
kexAlgs = record['ckex']
encAlgs = record['ceacts']
macAlgs = record['cmacts']
cmpAlgs = record['ccacts']
hassh = record['hassh']
hasshAlgorithms = record['hasshAlgorithms']
identificationString = record['client']
elif 'hasshServer' in record:
hasshType = 'server'
kexAlgs = record['skex']
encAlgs = record['seastc']
macAlgs = record['smastc']
cmpAlgs = record['scastc']
hassh = record['hasshServer']
hasshAlgorithms = record['hasshServerAlgorithms']
identificationString = record['server']
csv_record = csv_record.format(
ts=record['timestamp'], si=record['sourceIp'],
di=record['destinationIp'], sp=record['sourcePort'],
dp=record['destinationPort'], t=hasshType, p=identificationString,
h=hassh, v=HASSH_VERSION, ha=hasshAlgorithms, k=kexAlgs, e=encAlgs,
m=macAlgs, c=cmpAlgs)
return csv_record
def parse_cmd_args():
"""parse command line arguments"""
desc = """A python script for extracting HASSH fingerprints"""
parser = argparse.ArgumentParser(description=(desc))
helptxt = "pcap file to process"
parser.add_argument('-r', '--read_file', type=str, help=helptxt)
helptxt = "directory of pcap files to process"
parser.add_argument('-d', '--read_directory', type=str, help=helptxt)
helptxt = "listen on interface"
parser.add_argument('-i', '--interface', type=str, help=helptxt)
helptxt = "client or server fingerprint. Default: all"
parser.add_argument(
'-fp',
'--fingerprint',
default='all',
choices=['client', 'server'],
help=helptxt)
helptxt = "a dictionary of {decode_criterion_string: decode_as_protocol} \
that are used to tell tshark to decode protocols in situations it \
wouldn't usually. Default: {'tcp.port==2222': 'ssh'}."
parser.add_argument(
'-da', '--decode_as', type=dict, default=DECODE_AS, help=helptxt)
helptxt = "BPF capture filter to use (for live capture only).\
Default: 'tcp port 22 or tcp port 2222'"
parser.add_argument(
'-f', '--bpf_filter', type=str, default=CAP_BPF_FILTER, help=helptxt)
helptxt = "specify the output log format (json/csv)"
parser.add_argument(
'-l',
'--log_format',
choices=['json', 'csv'],
help=helptxt)
helptxt = "specify the output log file. Default: hassh.log"
parser.add_argument(
'-o', '--output_file', default='hassh.log', type=str, help=helptxt)
helptxt = "save the live captured packets to this file"
parser.add_argument(
'-w', '--write_pcap', default=None, type=str, help=helptxt)
helptxt = "print the output"
parser.add_argument(
'-p', '--print_output', action="store_true", help=helptxt)
return parser.parse_args()
def setup_logging(logfile):
"""setup logging"""
logger = logging.getLogger()
handler = logging.FileHandler(logfile)
formatter = logging.Formatter('%(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.setLevel(logging.INFO)
return logger
def main():
"""intake arguments from the user and extract HASSH fingerprints."""
args = parse_cmd_args()
setup_logging(args.output_file)
logger = logging.getLogger()
csv_header = ("timestamp,sourceIp,destinationIp,sourcePort,"
"destinationPort,hasshType,identificationString,"
"hassh,hasshVersion,hasshAlgorithms,kexAlgs,encAlgs,"
"macAlgs,cmpAlgs")
if args.log_format == 'csv':
logger.info(csv_header)
# Process PCAP file
if args.read_file:
cap = pyshark.FileCapture(args.read_file, decode_as=args.decode_as)
try:
for packet in cap:
process_packet(
packet,
logf=args.log_format,
fingerprint=args.fingerprint,
pout=args.print_output)
cap.close()
cap.eventloop.stop()
except Exception as e:
print('Error: {}'.format(e))
pass
# Process directory of PCAP files
elif args.read_directory:
files = [f.path for f in os.scandir(args.read_directory)
if not f.name.startswith('.') and not f.is_dir()
and (f.name.endswith(".pcap") or f.name.endswith(".pcapng")
or f.name.endswith(".cap"))]
for file in files:
cap = pyshark.FileCapture(file, decode_as=args.decode_as)
try:
for packet in cap:
process_packet(
packet,
logf=args.log_format,
fingerprint=args.fingerprint,
pout=args.print_output)
cap.close()
cap.eventloop.stop()
except Exception as e:
print('Error: {}'.format(e))
pass
# Capture live network traffic
elif args.interface:
# TODO: Use a Ring Buffer (LiveRingCapture), when the issue is fixed:
# https://github.com/KimiNewt/pyshark/issues/299
cap = pyshark.LiveCapture(
interface=args.interface,
decode_as=args.decode_as,
bpf_filter=args.bpf_filter,
output_file=args.write_pcap)
try:
for packet in cap.sniff_continuously(packet_count=0):
# if len(protocol_dict) > 10000:
# protocol_dict.clear()
process_packet(
packet,
logf=args.log_format,
fingerprint=args.fingerprint,
pout=args.print_output)
except (KeyboardInterrupt, SystemExit):
print("Exiting..\nBYE o/\n")
if __name__ == '__main__':
main()

82
python/hasshGen/README.md Normal file
View File

@ -0,0 +1,82 @@
# hasshGen.py
[![License: BSD 3-Clause License](https://img.shields.io/badge/License-BSD%203--Clause-blue.svg)](https://opensource.org/licenses/BSD-3-Clause)
Sample python script and Dockerfiles to automate building docker images with different SSH clients/versions for generating HASSH fingerprints.
As a demonstration we created a list ([sshClient_list](sshClient_list)) containing 49 different version of OpenSSH, Pythons paramiko and Dropbear SSH clients and generated a database of HASSH fingerprints in [JSON](hassh_fingerprints.json) and [CSV](hassh_fingerprints.csv) formats.
## Getting Started
1. Install Docker CE:
> [Download Docker Engine](https://store.docker.com/search?type=edition&offering=community)
2. Install the Docker's Python library:
> `pipenv install docker`
4. Test:
> `pipenv run python3 hasshgen.py -h`
Output:
```
usage: hasshgen.py [-h] [-i IMAGE] [-iV IMAGE_VER] [-c SSHCLIENT]
[-cV SSHCLIENT_VER] [-d DOCKER_FILE] -s SERVER
[-iF INPUT_FILE] [-f] [--cmd CMD]
A python script to automate building docker images with different SSH
clients/versions.
optional arguments:
-h, --help show this help message and exit
-i IMAGE, --image IMAGE
Docker image name. e.g. alpine, ubuntu
-iV IMAGE_VER, --image_ver IMAGE_VER
Docker image version. e.g. 18.04, latest
-c SSHCLIENT, --sshclient SSHCLIENT
SSH client name
-cV SSHCLIENT_VER, --sshclient_ver SSHCLIENT_VER
SSH client version
-d DOCKER_FILE, --docker_file DOCKER_FILE
Specify the Dockerfile
-s SERVER, --server SERVER
Specify the server address to test the SSH connection
-iF INPUT_FILE, --input_file INPUT_FILE
Bulk mode; Specify an input file containing a list of
docker image, image version, sshclient and sshclient
version
-f, --fingerprint Set this option to automatically run hassh.py for
capturing SSH client fingerprints (HASSH). Specify the
command for running hassh.py using --cmd arg.
--cmd CMD Enter the command for running hassh.py. Use with
-f/--fingerprint arg
```
## Usage
* Build and run a docker image with specific SSH client/version:
```
$ python3 hasshgen.py --docker_file Dockerfile.alpine --image alpine -iV 3.6 --sshclient openssh-client --sshclient_ver 7.5_p1-r2 --server <your-ssh-server>
[+] <Image: 'hasshgen:alpine0'> successfully built
- image: alpine:3.6, ssh client: openssh-client 7.5_p1-r2
[+] Command successfully executed!
```
After building the docker image, the script runs a SSH command to generate SSH connections for fingerprinting. It currently supports openssh, paramiko, and dropbear SSH clients. You can easily add other SSH clients.
* Build docker images using an input file in this format: [sshClient_list](sshClient_list)
```
$ python3 hasshgen.py --input_file sshClient_list --server <your-ssh-server>
[+] <Image: 'hasshgen:alpine1'> successfully built
- image: alpine:3.3, ssh client: openssh-client 7.2_p2-r3
[+] Command successfully executed!
[+] <Image: 'hasshgen:alpine2'> successfully built
- image: alpine:3.4, ssh client: openssh-client 7.2_p2-r5
[+] Command successfully executed!
[+] <Image: 'hasshgen:alpine3'> successfully built
- image: alpine:3.5, ssh client: openssh-client 7.4_p1-r1
[+] Command successfully executed!
```
* You can use `-f` or `--fingerprint` arg to automatically run `hassh.py` for extracting the fingerprints. Use `--cmd` to change the default HASSH_COMMAND:
```
$ python3 hasshgen.py --input_file sshClient_list --server <your-ssh-server> --fingerprint --cmd 'python3 ../hassh.py -i eth0 -l json -o fingerprint.json'
```

View File

@ -0,0 +1,10 @@
# https://hub.docker.com/_/alpine/
ARG IMAGE
ARG IMAGE_VER
FROM $IMAGE:$IMAGE_VER
MAINTAINER Adel "0x4D31" Karimi
ARG SSHCLIENT
ARG SSHCLIENT_VER
# Install the SSH client
RUN apk --no-cache add $SSHCLIENT=$SSHCLIENT_VER

View File

@ -0,0 +1,11 @@
# https://hub.docker.com/_/centos/
# https://hub.docker.com/_/fedora/
ARG IMAGE
ARG IMAGE_VER
FROM $IMAGE:$IMAGE_VER
MAINTAINER Adel "0x4D31" Karimi
ARG SSHCLIENT
ARG SSHCLIENT_VER
# Install the SSH client
RUN yum -y install $SSHCLIENT-$SSHCLIENT_VER && yum clean all

View File

@ -0,0 +1,14 @@
# https://hub.docker.com/_/debian/
# https://hub.docker.com/_/ubuntu/
ARG IMAGE
ARG IMAGE_VER
FROM $IMAGE:$IMAGE_VER
MAINTAINER Adel "0x4D31" Karimi
ENV DEBIAN_FRONTEND noninteractive
ARG SSHCLIENT
ARG SSHCLIENT_VER
# Install the SSH client
RUN apt-get update && apt-get install -y \
$SSHCLIENT=$SSHCLIENT_VER \
&& rm -rf /var/lib/apt/lists/*

View File

@ -0,0 +1,27 @@
# https://hub.docker.com/_/python/
ARG IMAGE
ARG IMAGE_VER
FROM $IMAGE:$IMAGE_VER
MAINTAINER Adel "0x4D31" Karimi
# ARG SSHCLIENT
ARG SSHCLIENT_VER
# Install paramiko (ref: eduardoshanahan/paramiko)
RUN apk add --virtual .install_dependencies_paramiko \
gcc \
musl-dev \
python-dev \
libffi-dev \
openssl-dev \
build-base \
py-pip \
&& apk add zlib \
zlib-dev \
libssl1.0 \
openssl-dev \
&& pip install cffi \
&& pip install paramiko==$SSHCLIENT_VER \
&& apk del .install_dependencies_paramiko
# Copy the python script
COPY paramiko_conn.py /tmp/

View File

@ -0,0 +1,50 @@
image,imageVersion,sshClient,sshClientVersion,clientIdentificationString,hassh,hasshVersion,hasshAlgorithms
debian,"sid-slim",dropbear,"2018.76-4","SSH-2.0-dropbear_2018.76",e22efe3cde8b396b874c3f13fdb6c61a,"1.0","curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,kexguess2@matt.ucc.asn.au;aes128-ctr,aes256-ctr,aes128-cbc,aes256-cbc,3des-ctr,3des-cbc;hmac-sha1-96,hmac-sha1,hmac-sha2-256;zlib@openssh.com,zlib,none"
debian,"buster-slim",dropbear,"2018.76-4","SSH-2.0-dropbear_2018.76",e22efe3cde8b396b874c3f13fdb6c61a,"1.0","curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,kexguess2@matt.ucc.asn.au;aes128-ctr,aes256-ctr,aes128-cbc,aes256-cbc,3des-ctr,3des-cbc;hmac-sha1-96,hmac-sha1,hmac-sha2-256;zlib@openssh.com,zlib,none"
debian,"stretch-slim",dropbear,"2016.74-5","SSH-2.0-dropbear_2016.74",7742887e2a57712bdb91a772093f54ce,"1.0","curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,kexguess2@matt.ucc.asn.au;aes128-ctr,aes256-ctr,aes128-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc,3des-ctr,3des-cbc;hmac-sha1-96,hmac-sha1,hmac-sha2-256,hmac-sha2-512,hmac-md5;zlib@openssh.com,zlib,none"
debian,"jessie-slim",dropbear,"2014.65-1+deb8u2","SSH-2.0-dropbear_2014.65",ad00edb0c2a031d9884826ba7b7ba41e,"1.0","curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,kexguess2@matt.ucc.asn.au;aes128-ctr,3des-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc;hmac-sha1-96,hmac-sha1,hmac-md5;zlib,zlib@openssh.com,none"
debian,"jessie-slim",dropbear,"2014.65-1+deb8u3","SSH-2.0-dropbear_2014.65",ad00edb0c2a031d9884826ba7b7ba41e,"1.0","curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,kexguess2@matt.ucc.asn.au;aes128-ctr,3des-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc;hmac-sha1-96,hmac-sha1,hmac-md5;zlib,zlib@openssh.com,none"
debian,"wheezy-slim",dropbear,"2012.55-1.3","SSH-2.0-dropbear_2012.55",16f898dd8ed8279e1055350b4e20666c,"1.0","diffie-hellman-group1-sha1,diffie-hellman-group14-sha1;aes128-ctr,3des-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc;hmac-sha1-96,hmac-sha1,hmac-md5;zlib,zlib@openssh.com,none"
debian,"wheezy-slim",dropbear,"2012.55-1.3+deb7u2","SSH-2.0-dropbear_2012.55",16f898dd8ed8279e1055350b4e20666c,"1.0","diffie-hellman-group1-sha1,diffie-hellman-group14-sha1;aes128-ctr,3des-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc;hmac-sha1-96,hmac-sha1,hmac-md5;zlib,zlib@openssh.com,none"
ubuntu,"18.04",dropbear,"2017.75-3build1","SSH-2.0-dropbear_2017.75",7742887e2a57712bdb91a772093f54ce,"1.0","curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,kexguess2@matt.ucc.asn.au;aes128-ctr,aes256-ctr,aes128-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc,3des-ctr,3des-cbc;hmac-sha1-96,hmac-sha1,hmac-sha2-256,hmac-sha2-512,hmac-md5;zlib@openssh.com,zlib,none"
ubuntu,"16.04",dropbear,"2016.72-1","SSH-2.0-dropbear_2016.72",7742887e2a57712bdb91a772093f54ce,"1.0","curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,kexguess2@matt.ucc.asn.au;aes128-ctr,aes256-ctr,aes128-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc,3des-ctr,3des-cbc;hmac-sha1-96,hmac-sha1,hmac-sha2-256,hmac-sha2-512,hmac-md5;zlib@openssh.com,zlib,none"
ubuntu,"14.04",dropbear,"2013.60-1ubuntu2","SSH-2.0-dropbear_2013.60",22865d7159a8dedcb091cd4fc5fd2841,"1.0","diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,kexguess2@matt.ucc.asn.au;aes128-ctr,3des-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc;hmac-sha1-96,hmac-sha1,hmac-md5;zlib,zlib@openssh.com,none"
alpine,"3.8","dropbear-dbclient","2018.76-r2","SSH-2.0-dropbear_2018.76",e22efe3cde8b396b874c3f13fdb6c61a,"1.0","curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,kexguess2@matt.ucc.asn.au;aes128-ctr,aes256-ctr,aes128-cbc,aes256-cbc,3des-ctr,3des-cbc;hmac-sha1-96,hmac-sha1,hmac-sha2-256;zlib@openssh.com,zlib,none"
alpine,"3.7","dropbear-dbclient","2017.75-r1","SSH-2.0-dropbear_2017.75",7742887e2a57712bdb91a772093f54ce,"1.0","curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,kexguess2@matt.ucc.asn.au;aes128-ctr,aes256-ctr,aes128-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc,3des-ctr,3des-cbc;hmac-sha1-96,hmac-sha1,hmac-sha2-256,hmac-sha2-512,hmac-md5;zlib@openssh.com,zlib,none"
alpine,"3.5","dropbear-dbclient","2017.75-r0","SSH-2.0-dropbear_2017.75",7742887e2a57712bdb91a772093f54ce,"1.0","curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,kexguess2@matt.ucc.asn.au;aes128-ctr,aes256-ctr,aes128-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc,3des-ctr,3des-cbc;hmac-sha1-96,hmac-sha1,hmac-sha2-256,hmac-sha2-512,hmac-md5;zlib@openssh.com,zlib,none"
python,"3.6-alpine",paramiko,"1.13.0","SSH-2.0-paramiko_1.13.0",b05dfbbf26090c7792d4aa6b76cd1f1a,"1.0","diffie-hellman-group1-sha1,diffie-hellman-group-exchange-sha1;aes128-ctr,aes256-ctr,aes128-cbc,blowfish-cbc,aes256-cbc,3des-cbc,arcfour128,arcfour256;hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96;none"
python,"3.6-alpine",paramiko,"1.14.0","SSH-2.0-paramiko_1.14.0",b05dfbbf26090c7792d4aa6b76cd1f1a,"1.0","diffie-hellman-group1-sha1,diffie-hellman-group-exchange-sha1;aes128-ctr,aes256-ctr,aes128-cbc,blowfish-cbc,aes256-cbc,3des-cbc,arcfour128,arcfour256;hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96;none"
python,"3.6-alpine",paramiko,"1.15.0","SSH-2.0-paramiko_1.15.0",d72f74b08466652d162ca02ad197b9ad,"1.0","diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1;aes128-ctr,aes256-ctr,aes128-cbc,blowfish-cbc,aes256-cbc,3des-cbc,arcfour128,arcfour256;hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96;none"
python,"3.6-alpine",paramiko,"1.16.0","SSH-2.0-paramiko_1.16.0",c6f5e6d54285a11b9f02fef7fc77bd6f,"1.0","diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256;aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,blowfish-cbc,aes192-cbc,aes256-cbc,3des-cbc,arcfour128,arcfour256;hmac-sha2-256,hmac-sha2-512,hmac-md5,hmac-sha1-96,hmac-md5-96,hmac-sha1;none"
python,"3.6-alpine",paramiko,"1.17.0","SSH-2.0-paramiko_1.17.0",c6f5e6d54285a11b9f02fef7fc77bd6f,"1.0","diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256;aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,blowfish-cbc,aes192-cbc,aes256-cbc,3des-cbc,arcfour128,arcfour256;hmac-sha2-256,hmac-sha2-512,hmac-md5,hmac-sha1-96,hmac-md5-96,hmac-sha1;none"
python,"3.6-alpine",paramiko,"1.18.0","SSH-2.0-paramiko_1.18.0",c6f5e6d54285a11b9f02fef7fc77bd6f,"1.0","diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256;aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,blowfish-cbc,aes192-cbc,aes256-cbc,3des-cbc,arcfour128,arcfour256;hmac-sha2-256,hmac-sha2-512,hmac-md5,hmac-sha1-96,hmac-md5-96,hmac-sha1;none"
python,"3.6-alpine",paramiko,"2.0.0","SSH-2.0-paramiko_2.0.0",c6f5e6d54285a11b9f02fef7fc77bd6f,"1.0","diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256;aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,blowfish-cbc,aes192-cbc,aes256-cbc,3des-cbc,arcfour128,arcfour256;hmac-sha2-256,hmac-sha2-512,hmac-md5,hmac-sha1-96,hmac-md5-96,hmac-sha1;none"
python,"3.6-alpine",paramiko,"2.1.0","SSH-2.0-paramiko_2.1.0",c6f5e6d54285a11b9f02fef7fc77bd6f,"1.0","diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256;aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,blowfish-cbc,aes192-cbc,aes256-cbc,3des-cbc,arcfour128,arcfour256;hmac-sha2-256,hmac-sha2-512,hmac-md5,hmac-sha1-96,hmac-md5-96,hmac-sha1;none"
python,"3.6-alpine",paramiko,"2.2.0","SSH-2.0-paramiko_2.2.0",b5752e36ba6c5979a575e43178908adf,"1.0","ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1;aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,aes192-cbc,aes256-cbc,blowfish-cbc,3des-cbc;hmac-sha2-256,hmac-sha2-512,hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96;none"
python,"3.6-alpine",paramiko,"2.3.0","SSH-2.0-paramiko_2.3.0",b5752e36ba6c5979a575e43178908adf,"1.0","ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1;aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,aes192-cbc,aes256-cbc,blowfish-cbc,3des-cbc;hmac-sha2-256,hmac-sha2-512,hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96;none"
python,"3.6-alpine",paramiko,"2.4.1","SSH-2.0-paramiko_2.4.1",b5752e36ba6c5979a575e43178908adf,"1.0","ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1;aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,aes192-cbc,aes256-cbc,blowfish-cbc,3des-cbc;hmac-sha2-256,hmac-sha2-512,hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96;none"
centos,7,"openssh-clients","7.4p1-16.el7","SSH-2.0-OpenSSH_7.4",ec9ea89c70f5fc71cf61061bff5e4740,"1.0","curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,ext-info-c;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com,zlib"
centos,6,"openssh-clients","5.3p1-123.el6_9","SSH-2.0-OpenSSH_5.3",3646f4d62498cd92721bd242ce988a42,"1.0","diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1;aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se;hmac-sha1,umac-64@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96;none,zlib@openssh.com,zlib"
fedora,rawhide,"openssh-clients","7.8p1-2.fc30","SSH-2.0-OpenSSH_7.8",4eea4239dc591cbf6e661a656ae9d58c,"1.0","curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,ext-info-c;aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes256-cbc,aes128-gcm@openssh.com,aes128-ctr,aes128-cbc;hmac-sha2-256-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha2-256,hmac-sha1,umac-128@openssh.com,hmac-sha2-512;none,zlib@openssh.com,zlib"
fedora,29,"openssh-clients","7.8p1-1.fc29","SSH-2.0-OpenSSH_7.8",4eea4239dc591cbf6e661a656ae9d58c,"1.0","curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,ext-info-c;aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes256-cbc,aes128-gcm@openssh.com,aes128-ctr,aes128-cbc;hmac-sha2-256-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha2-256,hmac-sha1,umac-128@openssh.com,hmac-sha2-512;none,zlib@openssh.com,zlib"
fedora,28,"openssh-clients","7.7p1-2.fc28","SSH-2.0-OpenSSH_7.7",4eea4239dc591cbf6e661a656ae9d58c,"1.0","curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,ext-info-c;aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes256-cbc,aes128-gcm@openssh.com,aes128-ctr,aes128-cbc;hmac-sha2-256-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha2-256,hmac-sha1,umac-128@openssh.com,hmac-sha2-512;none,zlib@openssh.com,zlib"
fedora,27,"openssh-clients","7.5p1-5.fc27","SSH-2.0-OpenSSH_7.5",82a9e17b13a816a13b8c8bfe1b5cf030,"1.0","curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,ext-info-c;aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes256-cbc,aes128-gcm@openssh.com,aes128-ctr,aes128-cbc,3des-cbc;umac-128-etm@openssh.com,hmac-sha1-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,umac-128@openssh.com,hmac-sha1,hmac-sha2-256,hmac-sha2-512;none,zlib@openssh.com,zlib"
fedora,26,"openssh-clients","7.5p1-2.fc26","SSH-2.0-OpenSSH_7.5",251479d8057683f8201e4a52b80a75ff,"1.0","curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,ext-info-c;aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes256-cbc,aes128-gcm@openssh.com,aes128-ctr,aes128-cbc,3des-cbc;umac-128-etm@openssh.com,umac-128@openssh.com,hmac-sha1-etm@openssh.com,hmac-sha1,hmac-sha2-256-etm@openssh.com,hmac-sha2-256,hmac-sha2-512-etm@openssh.com,hmac-sha2-512;none,zlib@openssh.com,zlib"
debian,"sid-slim","openssh-client","1:7.8p1-1","SSH-2.0-OpenSSH_7.8p1 Debian-1",ec7378c1a92f5a8dde7e8b7a1ddf33d1,"1.0","curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com,zlib"
debian,"buster-slim","openssh-client","1:7.8p1-1","SSH-2.0-OpenSSH_7.8p1 Debian-1",ec7378c1a92f5a8dde7e8b7a1ddf33d1,"1.0","curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com,zlib"
debian,"stretch-slim","openssh-client","1:7.4p1-10+deb9u4","SSH-2.0-OpenSSH_7.4p1 Debian-10+deb9u4",0df0d56bb50c6b2426d8d40234bf1826,"1.0","curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com,zlib"
debian,"jessie-slim","openssh-client","1:6.7p1-5+deb8u4","SSH-2.0-OpenSSH_6.7p1 Debian-5+deb8u4",46c5bd9748882f1a5d75753fb7d47a61,"1.0","curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1;aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1,hmac-md5-etm@openssh.com,hmac-ripemd160-etm@openssh.com,hmac-sha1-96-etm@openssh.com,hmac-md5-96-etm@openssh.com,hmac-md5,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96;none,zlib@openssh.com,zlib"
debian,"jessie-slim","openssh-client","1:6.7p1-5+deb8u7","SSH-2.0-OpenSSH_6.7p1 Debian-5+deb8u7",46c5bd9748882f1a5d75753fb7d47a61,"1.0","curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1;aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1,hmac-md5-etm@openssh.com,hmac-ripemd160-etm@openssh.com,hmac-sha1-96-etm@openssh.com,hmac-md5-96-etm@openssh.com,hmac-md5,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96;none,zlib@openssh.com,zlib"
debian,"wheezy-backports","openssh-client","1:6.6p1-4~bpo70+1","SSH-2.0-OpenSSH_6.6.1p1 Debian-4~bpo70+1",e30029a55fea2fcd3501023fb659bfae,"1.0","curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1;aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se;hmac-md5-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-ripemd160-etm@openssh.com,hmac-sha1-96-etm@openssh.com,hmac-md5-96-etm@openssh.com,hmac-md5,hmac-sha1,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96;none,zlib@openssh.com,zlib"
debian,"wheezy-slim","openssh-client","1:6.0p1-4+deb7u4","SSH-2.0-OpenSSH_6.0p1 Debian-4+deb7u4",c0216580c330eab8906d740d31f761a8,"1.0","ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1;aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se;hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-sha2-256,hmac-sha2-256-96,hmac-sha2-512,hmac-sha2-512-96,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96;none,zlib@openssh.com,zlib"
debian,"wheezy-slim","openssh-client","1:6.0p1-4+deb7u7","SSH-2.0-OpenSSH_6.0p1 Debian-4+deb7u7",c0216580c330eab8906d740d31f761a8,"1.0","ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1;aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se;hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-sha2-256,hmac-sha2-256-96,hmac-sha2-512,hmac-sha2-512-96,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96;none,zlib@openssh.com,zlib"
ubuntu,"18.10","openssh-client","1:7.7p1-4","SSH-2.0-OpenSSH_7.7p1 Ubuntu-4",06046964c022c6407d15a27b12a6a4fb,"1.0","curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com,zlib"
ubuntu,"18.04","openssh-client","1:7.6p1-4","SSH-2.0-OpenSSH_7.6p1 Ubuntu-4",06046964c022c6407d15a27b12a6a4fb,"1.0","curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com,zlib"
ubuntu,"16.04","openssh-client","1:7.2p2-4ubuntu2.4","SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.4",68e0ba85e1a818f7c49ea3f4b849bd15,"1.0","curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,ext-info-c;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc,3des-cbc;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com,zlib"
ubuntu,"14.04","openssh-client","1:6.6p1-2ubuntu2.10","SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.10",e30029a55fea2fcd3501023fb659bfae,"1.0","curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1;aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se;hmac-md5-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-ripemd160-etm@openssh.com,hmac-sha1-96-etm@openssh.com,hmac-md5-96-etm@openssh.com,hmac-md5,hmac-sha1,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96;none,zlib@openssh.com,zlib"
alpine,edge,"openssh-client","7.8_p1-r0","SSH-2.0-OpenSSH_7.8",ec7378c1a92f5a8dde7e8b7a1ddf33d1,"1.0","curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com,zlib"
alpine,"3.7","openssh-client","7.5_p1-r8","SSH-2.0-OpenSSH_7.5p1-hpn14v4",0df0d56bb50c6b2426d8d40234bf1826,"1.0","curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com,zlib"
alpine,"3.6","openssh-client","7.5_p1-r2","SSH-2.0-OpenSSH_7.5p1-hpn14v4",0df0d56bb50c6b2426d8d40234bf1826,"1.0","curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com,zlib"
alpine,"3.5","openssh-client","7.4_p1-r1","SSH-2.0-OpenSSH_7.4",0df0d56bb50c6b2426d8d40234bf1826,"1.0","curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com,zlib"
alpine,"3.4","openssh-client","7.2_p2-r5","SSH-2.0-OpenSSH_7.2p2-hpn14v4",68e0ba85e1a818f7c49ea3f4b849bd15,"1.0","curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,ext-info-c;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc,3des-cbc;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com,zlib"
alpine,"3.3","openssh-client","7.2_p2-r3","SSH-2.0-OpenSSH_7.2p2-hpn14v4",68e0ba85e1a818f7c49ea3f4b849bd15,"1.0","curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,ext-info-c;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc,3des-cbc;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com,zlib"
1 image imageVersion sshClient sshClientVersion clientIdentificationString hassh hasshVersion hasshAlgorithms
2 debian sid-slim dropbear 2018.76-4 SSH-2.0-dropbear_2018.76 e22efe3cde8b396b874c3f13fdb6c61a 1.0 curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,kexguess2@matt.ucc.asn.au;aes128-ctr,aes256-ctr,aes128-cbc,aes256-cbc,3des-ctr,3des-cbc;hmac-sha1-96,hmac-sha1,hmac-sha2-256;zlib@openssh.com,zlib,none
3 debian buster-slim dropbear 2018.76-4 SSH-2.0-dropbear_2018.76 e22efe3cde8b396b874c3f13fdb6c61a 1.0 curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,kexguess2@matt.ucc.asn.au;aes128-ctr,aes256-ctr,aes128-cbc,aes256-cbc,3des-ctr,3des-cbc;hmac-sha1-96,hmac-sha1,hmac-sha2-256;zlib@openssh.com,zlib,none
4 debian stretch-slim dropbear 2016.74-5 SSH-2.0-dropbear_2016.74 7742887e2a57712bdb91a772093f54ce 1.0 curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,kexguess2@matt.ucc.asn.au;aes128-ctr,aes256-ctr,aes128-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc,3des-ctr,3des-cbc;hmac-sha1-96,hmac-sha1,hmac-sha2-256,hmac-sha2-512,hmac-md5;zlib@openssh.com,zlib,none
5 debian jessie-slim dropbear 2014.65-1+deb8u2 SSH-2.0-dropbear_2014.65 ad00edb0c2a031d9884826ba7b7ba41e 1.0 curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,kexguess2@matt.ucc.asn.au;aes128-ctr,3des-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc;hmac-sha1-96,hmac-sha1,hmac-md5;zlib,zlib@openssh.com,none
6 debian jessie-slim dropbear 2014.65-1+deb8u3 SSH-2.0-dropbear_2014.65 ad00edb0c2a031d9884826ba7b7ba41e 1.0 curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,kexguess2@matt.ucc.asn.au;aes128-ctr,3des-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc;hmac-sha1-96,hmac-sha1,hmac-md5;zlib,zlib@openssh.com,none
7 debian wheezy-slim dropbear 2012.55-1.3 SSH-2.0-dropbear_2012.55 16f898dd8ed8279e1055350b4e20666c 1.0 diffie-hellman-group1-sha1,diffie-hellman-group14-sha1;aes128-ctr,3des-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc;hmac-sha1-96,hmac-sha1,hmac-md5;zlib,zlib@openssh.com,none
8 debian wheezy-slim dropbear 2012.55-1.3+deb7u2 SSH-2.0-dropbear_2012.55 16f898dd8ed8279e1055350b4e20666c 1.0 diffie-hellman-group1-sha1,diffie-hellman-group14-sha1;aes128-ctr,3des-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc;hmac-sha1-96,hmac-sha1,hmac-md5;zlib,zlib@openssh.com,none
9 ubuntu 18.04 dropbear 2017.75-3build1 SSH-2.0-dropbear_2017.75 7742887e2a57712bdb91a772093f54ce 1.0 curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,kexguess2@matt.ucc.asn.au;aes128-ctr,aes256-ctr,aes128-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc,3des-ctr,3des-cbc;hmac-sha1-96,hmac-sha1,hmac-sha2-256,hmac-sha2-512,hmac-md5;zlib@openssh.com,zlib,none
10 ubuntu 16.04 dropbear 2016.72-1 SSH-2.0-dropbear_2016.72 7742887e2a57712bdb91a772093f54ce 1.0 curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,kexguess2@matt.ucc.asn.au;aes128-ctr,aes256-ctr,aes128-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc,3des-ctr,3des-cbc;hmac-sha1-96,hmac-sha1,hmac-sha2-256,hmac-sha2-512,hmac-md5;zlib@openssh.com,zlib,none
11 ubuntu 14.04 dropbear 2013.60-1ubuntu2 SSH-2.0-dropbear_2013.60 22865d7159a8dedcb091cd4fc5fd2841 1.0 diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,kexguess2@matt.ucc.asn.au;aes128-ctr,3des-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc;hmac-sha1-96,hmac-sha1,hmac-md5;zlib,zlib@openssh.com,none
12 alpine 3.8 dropbear-dbclient 2018.76-r2 SSH-2.0-dropbear_2018.76 e22efe3cde8b396b874c3f13fdb6c61a 1.0 curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,kexguess2@matt.ucc.asn.au;aes128-ctr,aes256-ctr,aes128-cbc,aes256-cbc,3des-ctr,3des-cbc;hmac-sha1-96,hmac-sha1,hmac-sha2-256;zlib@openssh.com,zlib,none
13 alpine 3.7 dropbear-dbclient 2017.75-r1 SSH-2.0-dropbear_2017.75 7742887e2a57712bdb91a772093f54ce 1.0 curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,kexguess2@matt.ucc.asn.au;aes128-ctr,aes256-ctr,aes128-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc,3des-ctr,3des-cbc;hmac-sha1-96,hmac-sha1,hmac-sha2-256,hmac-sha2-512,hmac-md5;zlib@openssh.com,zlib,none
14 alpine 3.5 dropbear-dbclient 2017.75-r0 SSH-2.0-dropbear_2017.75 7742887e2a57712bdb91a772093f54ce 1.0 curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,kexguess2@matt.ucc.asn.au;aes128-ctr,aes256-ctr,aes128-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc,3des-ctr,3des-cbc;hmac-sha1-96,hmac-sha1,hmac-sha2-256,hmac-sha2-512,hmac-md5;zlib@openssh.com,zlib,none
15 python 3.6-alpine paramiko 1.13.0 SSH-2.0-paramiko_1.13.0 b05dfbbf26090c7792d4aa6b76cd1f1a 1.0 diffie-hellman-group1-sha1,diffie-hellman-group-exchange-sha1;aes128-ctr,aes256-ctr,aes128-cbc,blowfish-cbc,aes256-cbc,3des-cbc,arcfour128,arcfour256;hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96;none
16 python 3.6-alpine paramiko 1.14.0 SSH-2.0-paramiko_1.14.0 b05dfbbf26090c7792d4aa6b76cd1f1a 1.0 diffie-hellman-group1-sha1,diffie-hellman-group-exchange-sha1;aes128-ctr,aes256-ctr,aes128-cbc,blowfish-cbc,aes256-cbc,3des-cbc,arcfour128,arcfour256;hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96;none
17 python 3.6-alpine paramiko 1.15.0 SSH-2.0-paramiko_1.15.0 d72f74b08466652d162ca02ad197b9ad 1.0 diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1;aes128-ctr,aes256-ctr,aes128-cbc,blowfish-cbc,aes256-cbc,3des-cbc,arcfour128,arcfour256;hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96;none
18 python 3.6-alpine paramiko 1.16.0 SSH-2.0-paramiko_1.16.0 c6f5e6d54285a11b9f02fef7fc77bd6f 1.0 diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256;aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,blowfish-cbc,aes192-cbc,aes256-cbc,3des-cbc,arcfour128,arcfour256;hmac-sha2-256,hmac-sha2-512,hmac-md5,hmac-sha1-96,hmac-md5-96,hmac-sha1;none
19 python 3.6-alpine paramiko 1.17.0 SSH-2.0-paramiko_1.17.0 c6f5e6d54285a11b9f02fef7fc77bd6f 1.0 diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256;aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,blowfish-cbc,aes192-cbc,aes256-cbc,3des-cbc,arcfour128,arcfour256;hmac-sha2-256,hmac-sha2-512,hmac-md5,hmac-sha1-96,hmac-md5-96,hmac-sha1;none
20 python 3.6-alpine paramiko 1.18.0 SSH-2.0-paramiko_1.18.0 c6f5e6d54285a11b9f02fef7fc77bd6f 1.0 diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256;aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,blowfish-cbc,aes192-cbc,aes256-cbc,3des-cbc,arcfour128,arcfour256;hmac-sha2-256,hmac-sha2-512,hmac-md5,hmac-sha1-96,hmac-md5-96,hmac-sha1;none
21 python 3.6-alpine paramiko 2.0.0 SSH-2.0-paramiko_2.0.0 c6f5e6d54285a11b9f02fef7fc77bd6f 1.0 diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256;aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,blowfish-cbc,aes192-cbc,aes256-cbc,3des-cbc,arcfour128,arcfour256;hmac-sha2-256,hmac-sha2-512,hmac-md5,hmac-sha1-96,hmac-md5-96,hmac-sha1;none
22 python 3.6-alpine paramiko 2.1.0 SSH-2.0-paramiko_2.1.0 c6f5e6d54285a11b9f02fef7fc77bd6f 1.0 diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256;aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,blowfish-cbc,aes192-cbc,aes256-cbc,3des-cbc,arcfour128,arcfour256;hmac-sha2-256,hmac-sha2-512,hmac-md5,hmac-sha1-96,hmac-md5-96,hmac-sha1;none
23 python 3.6-alpine paramiko 2.2.0 SSH-2.0-paramiko_2.2.0 b5752e36ba6c5979a575e43178908adf 1.0 ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1;aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,aes192-cbc,aes256-cbc,blowfish-cbc,3des-cbc;hmac-sha2-256,hmac-sha2-512,hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96;none
24 python 3.6-alpine paramiko 2.3.0 SSH-2.0-paramiko_2.3.0 b5752e36ba6c5979a575e43178908adf 1.0 ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1;aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,aes192-cbc,aes256-cbc,blowfish-cbc,3des-cbc;hmac-sha2-256,hmac-sha2-512,hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96;none
25 python 3.6-alpine paramiko 2.4.1 SSH-2.0-paramiko_2.4.1 b5752e36ba6c5979a575e43178908adf 1.0 ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1;aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,aes192-cbc,aes256-cbc,blowfish-cbc,3des-cbc;hmac-sha2-256,hmac-sha2-512,hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96;none
26 centos 7 openssh-clients 7.4p1-16.el7 SSH-2.0-OpenSSH_7.4 ec9ea89c70f5fc71cf61061bff5e4740 1.0 curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,ext-info-c;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com,zlib
27 centos 6 openssh-clients 5.3p1-123.el6_9 SSH-2.0-OpenSSH_5.3 3646f4d62498cd92721bd242ce988a42 1.0 diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1;aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se;hmac-sha1,umac-64@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96;none,zlib@openssh.com,zlib
28 fedora rawhide openssh-clients 7.8p1-2.fc30 SSH-2.0-OpenSSH_7.8 4eea4239dc591cbf6e661a656ae9d58c 1.0 curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,ext-info-c;aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes256-cbc,aes128-gcm@openssh.com,aes128-ctr,aes128-cbc;hmac-sha2-256-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha2-256,hmac-sha1,umac-128@openssh.com,hmac-sha2-512;none,zlib@openssh.com,zlib
29 fedora 29 openssh-clients 7.8p1-1.fc29 SSH-2.0-OpenSSH_7.8 4eea4239dc591cbf6e661a656ae9d58c 1.0 curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,ext-info-c;aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes256-cbc,aes128-gcm@openssh.com,aes128-ctr,aes128-cbc;hmac-sha2-256-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha2-256,hmac-sha1,umac-128@openssh.com,hmac-sha2-512;none,zlib@openssh.com,zlib
30 fedora 28 openssh-clients 7.7p1-2.fc28 SSH-2.0-OpenSSH_7.7 4eea4239dc591cbf6e661a656ae9d58c 1.0 curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,ext-info-c;aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes256-cbc,aes128-gcm@openssh.com,aes128-ctr,aes128-cbc;hmac-sha2-256-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha2-256,hmac-sha1,umac-128@openssh.com,hmac-sha2-512;none,zlib@openssh.com,zlib
31 fedora 27 openssh-clients 7.5p1-5.fc27 SSH-2.0-OpenSSH_7.5 82a9e17b13a816a13b8c8bfe1b5cf030 1.0 curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,ext-info-c;aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes256-cbc,aes128-gcm@openssh.com,aes128-ctr,aes128-cbc,3des-cbc;umac-128-etm@openssh.com,hmac-sha1-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,umac-128@openssh.com,hmac-sha1,hmac-sha2-256,hmac-sha2-512;none,zlib@openssh.com,zlib
32 fedora 26 openssh-clients 7.5p1-2.fc26 SSH-2.0-OpenSSH_7.5 251479d8057683f8201e4a52b80a75ff 1.0 curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,ext-info-c;aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes256-cbc,aes128-gcm@openssh.com,aes128-ctr,aes128-cbc,3des-cbc;umac-128-etm@openssh.com,umac-128@openssh.com,hmac-sha1-etm@openssh.com,hmac-sha1,hmac-sha2-256-etm@openssh.com,hmac-sha2-256,hmac-sha2-512-etm@openssh.com,hmac-sha2-512;none,zlib@openssh.com,zlib
33 debian sid-slim openssh-client 1:7.8p1-1 SSH-2.0-OpenSSH_7.8p1 Debian-1 ec7378c1a92f5a8dde7e8b7a1ddf33d1 1.0 curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com,zlib
34 debian buster-slim openssh-client 1:7.8p1-1 SSH-2.0-OpenSSH_7.8p1 Debian-1 ec7378c1a92f5a8dde7e8b7a1ddf33d1 1.0 curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com,zlib
35 debian stretch-slim openssh-client 1:7.4p1-10+deb9u4 SSH-2.0-OpenSSH_7.4p1 Debian-10+deb9u4 0df0d56bb50c6b2426d8d40234bf1826 1.0 curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com,zlib
36 debian jessie-slim openssh-client 1:6.7p1-5+deb8u4 SSH-2.0-OpenSSH_6.7p1 Debian-5+deb8u4 46c5bd9748882f1a5d75753fb7d47a61 1.0 curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1;aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1,hmac-md5-etm@openssh.com,hmac-ripemd160-etm@openssh.com,hmac-sha1-96-etm@openssh.com,hmac-md5-96-etm@openssh.com,hmac-md5,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96;none,zlib@openssh.com,zlib
37 debian jessie-slim openssh-client 1:6.7p1-5+deb8u7 SSH-2.0-OpenSSH_6.7p1 Debian-5+deb8u7 46c5bd9748882f1a5d75753fb7d47a61 1.0 curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1;aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1,hmac-md5-etm@openssh.com,hmac-ripemd160-etm@openssh.com,hmac-sha1-96-etm@openssh.com,hmac-md5-96-etm@openssh.com,hmac-md5,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96;none,zlib@openssh.com,zlib
38 debian wheezy-backports openssh-client 1:6.6p1-4~bpo70+1 SSH-2.0-OpenSSH_6.6.1p1 Debian-4~bpo70+1 e30029a55fea2fcd3501023fb659bfae 1.0 curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1;aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se;hmac-md5-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-ripemd160-etm@openssh.com,hmac-sha1-96-etm@openssh.com,hmac-md5-96-etm@openssh.com,hmac-md5,hmac-sha1,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96;none,zlib@openssh.com,zlib
39 debian wheezy-slim openssh-client 1:6.0p1-4+deb7u4 SSH-2.0-OpenSSH_6.0p1 Debian-4+deb7u4 c0216580c330eab8906d740d31f761a8 1.0 ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1;aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se;hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-sha2-256,hmac-sha2-256-96,hmac-sha2-512,hmac-sha2-512-96,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96;none,zlib@openssh.com,zlib
40 debian wheezy-slim openssh-client 1:6.0p1-4+deb7u7 SSH-2.0-OpenSSH_6.0p1 Debian-4+deb7u7 c0216580c330eab8906d740d31f761a8 1.0 ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1;aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se;hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-sha2-256,hmac-sha2-256-96,hmac-sha2-512,hmac-sha2-512-96,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96;none,zlib@openssh.com,zlib
41 ubuntu 18.10 openssh-client 1:7.7p1-4 SSH-2.0-OpenSSH_7.7p1 Ubuntu-4 06046964c022c6407d15a27b12a6a4fb 1.0 curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com,zlib
42 ubuntu 18.04 openssh-client 1:7.6p1-4 SSH-2.0-OpenSSH_7.6p1 Ubuntu-4 06046964c022c6407d15a27b12a6a4fb 1.0 curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com,zlib
43 ubuntu 16.04 openssh-client 1:7.2p2-4ubuntu2.4 SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.4 68e0ba85e1a818f7c49ea3f4b849bd15 1.0 curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,ext-info-c;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc,3des-cbc;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com,zlib
44 ubuntu 14.04 openssh-client 1:6.6p1-2ubuntu2.10 SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.10 e30029a55fea2fcd3501023fb659bfae 1.0 curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1;aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se;hmac-md5-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-ripemd160-etm@openssh.com,hmac-sha1-96-etm@openssh.com,hmac-md5-96-etm@openssh.com,hmac-md5,hmac-sha1,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96;none,zlib@openssh.com,zlib
45 alpine edge openssh-client 7.8_p1-r0 SSH-2.0-OpenSSH_7.8 ec7378c1a92f5a8dde7e8b7a1ddf33d1 1.0 curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com,zlib
46 alpine 3.7 openssh-client 7.5_p1-r8 SSH-2.0-OpenSSH_7.5p1-hpn14v4 0df0d56bb50c6b2426d8d40234bf1826 1.0 curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com,zlib
47 alpine 3.6 openssh-client 7.5_p1-r2 SSH-2.0-OpenSSH_7.5p1-hpn14v4 0df0d56bb50c6b2426d8d40234bf1826 1.0 curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com,zlib
48 alpine 3.5 openssh-client 7.4_p1-r1 SSH-2.0-OpenSSH_7.4 0df0d56bb50c6b2426d8d40234bf1826 1.0 curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com,zlib
49 alpine 3.4 openssh-client 7.2_p2-r5 SSH-2.0-OpenSSH_7.2p2-hpn14v4 68e0ba85e1a818f7c49ea3f4b849bd15 1.0 curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,ext-info-c;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc,3des-cbc;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com,zlib
50 alpine 3.3 openssh-client 7.2_p2-r3 SSH-2.0-OpenSSH_7.2p2-hpn14v4 68e0ba85e1a818f7c49ea3f4b849bd15 1.0 curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,ext-info-c;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc,3des-cbc;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com,zlib

View File

@ -0,0 +1,49 @@
{"image": "alpine", "imageVersion": "3.3", "sshClient": "openssh-client", "sshClientVersion": "7.2_p2-r3", "clientIdentificationString": "SSH-2.0-OpenSSH_7.2p2-hpn14v4", "hassh": "68e0ba85e1a818f7c49ea3f4b849bd15", "hasshAlgorithms": "curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,ext-info-c;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc,3des-cbc;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com,zlib", "hasshVersion": "1.0", "ckex": "curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,ext-info-c", "ceacts": "chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc,3des-cbc", "cmacts": "umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1", "ccacts": "none,zlib@openssh.com,zlib", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc,3des-cbc", "cmastc": "umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1", "ccastc": "none,zlib@openssh.com,zlib"}
{"image": "alpine", "imageVersion": "3.4", "sshClient": "openssh-client", "sshClientVersion": "7.2_p2-r5", "clientIdentificationString": "SSH-2.0-OpenSSH_7.2p2-hpn14v4", "hassh": "68e0ba85e1a818f7c49ea3f4b849bd15", "hasshAlgorithms": "curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,ext-info-c;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc,3des-cbc;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com,zlib", "hasshVersion": "1.0", "ckex": "curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,ext-info-c", "ceacts": "chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc,3des-cbc", "cmacts": "umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1", "ccacts": "none,zlib@openssh.com,zlib", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc,3des-cbc", "cmastc": "umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1", "ccastc": "none,zlib@openssh.com,zlib"}
{"image": "alpine", "imageVersion": "3.5", "sshClient": "openssh-client", "sshClientVersion": "7.4_p1-r1", "clientIdentificationString": "SSH-2.0-OpenSSH_7.4", "hassh": "0df0d56bb50c6b2426d8d40234bf1826", "hasshAlgorithms": "curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com,zlib", "hasshVersion": "1.0", "ckex": "curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c", "ceacts": "chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc", "cmacts": "umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1", "ccacts": "none,zlib@openssh.com,zlib", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc", "cmastc": "umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1", "ccastc": "none,zlib@openssh.com,zlib"}
{"image": "alpine", "imageVersion": "3.6", "sshClient": "openssh-client","sshClientVersion": "7.5_p1-r2", "clientIdentificationString": "SSH-2.0-OpenSSH_7.5p1-hpn14v4", "hassh": "0df0d56bb50c6b2426d8d40234bf1826", "hasshAlgorithms": "curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com,zlib", "hasshVersion": "1.0", "ckex": "curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c", "ceacts": "chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc", "cmacts": "umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1", "ccacts": "none,zlib@openssh.com,zlib", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc", "cmastc": "umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1", "ccastc": "none,zlib@openssh.com,zlib"}
{"image": "alpine", "imageVersion": "3.7", "sshClient": "openssh-client","sshClientVersion": "7.5_p1-r8", "clientIdentificationString": "SSH-2.0-OpenSSH_7.5p1-hpn14v4", "hassh": "0df0d56bb50c6b2426d8d40234bf1826", "hasshAlgorithms": "curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com,zlib", "hasshVersion": "1.0", "ckex": "curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c", "ceacts": "chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc", "cmacts": "umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1", "ccacts": "none,zlib@openssh.com,zlib", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc", "cmastc": "umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1", "ccastc": "none,zlib@openssh.com,zlib"}
{"image": "alpine", "imageVersion": "edge", "sshClient": "openssh-client","sshClientVersion": "7.8_p1-r0", "clientIdentificationString": "SSH-2.0-OpenSSH_7.8", "hassh": "ec7378c1a92f5a8dde7e8b7a1ddf33d1", "hasshAlgorithms": "curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com,zlib", "hasshVersion": "1.0", "ckex": "curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c", "ceacts": "chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com", "cmacts": "umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1", "ccacts": "none,zlib@openssh.com,zlib", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com", "cmastc": "umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1", "ccastc": "none,zlib@openssh.com,zlib"}
{"image": "ubuntu", "imageVersion": "14.04", "sshClient": "openssh-client","sshClientVersion": "1:6.6p1-2ubuntu2.10", "clientIdentificationString": "SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.10", "hassh": "e30029a55fea2fcd3501023fb659bfae", "hasshAlgorithms": "curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1;aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se;hmac-md5-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-ripemd160-etm@openssh.com,hmac-sha1-96-etm@openssh.com,hmac-md5-96-etm@openssh.com,hmac-md5,hmac-sha1,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96;none,zlib@openssh.com,zlib", "hasshVersion": "1.0", "ckex": "curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1", "ceacts": "aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se", "cmacts": "hmac-md5-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-ripemd160-etm@openssh.com,hmac-sha1-96-etm@openssh.com,hmac-md5-96-etm@openssh.com,hmac-md5,hmac-sha1,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96", "ccacts": "none,zlib@openssh.com,zlib", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se", "cmastc": "hmac-md5-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-ripemd160-etm@openssh.com,hmac-sha1-96-etm@openssh.com,hmac-md5-96-etm@openssh.com,hmac-md5,hmac-sha1,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96", "ccastc": "none,zlib@openssh.com,zlib"}
{"image": "ubuntu", "imageVersion": "16.04", "sshClient": "openssh-client","sshClientVersion": "1:7.2p2-4ubuntu2.4", "clientIdentificationString": "SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.4", "hassh": "68e0ba85e1a818f7c49ea3f4b849bd15", "hasshAlgorithms": "curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,ext-info-c;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc,3des-cbc;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com,zlib", "hasshVersion": "1.0", "ckex": "curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,ext-info-c", "ceacts": "chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc,3des-cbc", "cmacts": "umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1", "ccacts": "none,zlib@openssh.com,zlib", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc,3des-cbc", "cmastc": "umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1", "ccastc": "none,zlib@openssh.com,zlib"}
{"image": "ubuntu", "imageVersion": "18.04", "sshClient": "openssh-client","sshClientVersion": "1:7.6p1-4", "clientIdentificationString": "SSH-2.0-OpenSSH_7.6p1 Ubuntu-4", "hassh": "06046964c022c6407d15a27b12a6a4fb", "hasshAlgorithms": "curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com,zlib", "hasshVersion": "1.0", "ckex": "curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c", "ceacts": "chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com", "cmacts": "umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1", "ccacts": "none,zlib@openssh.com,zlib", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com", "cmastc": "umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1", "ccastc": "none,zlib@openssh.com,zlib"}
{"image": "ubuntu", "imageVersion": "18.10", "sshClient": "openssh-client","sshClientVersion": "1:7.7p1-4", "clientIdentificationString": "SSH-2.0-OpenSSH_7.7p1 Ubuntu-4", "hassh": "06046964c022c6407d15a27b12a6a4fb", "hasshAlgorithms": "curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com,zlib", "hasshVersion": "1.0", "ckex": "curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c", "ceacts": "chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com", "cmacts": "umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1", "ccacts": "none,zlib@openssh.com,zlib", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com", "cmastc": "umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1", "ccastc": "none,zlib@openssh.com,zlib"}
{"image": "debian", "imageVersion": "wheezy-slim", "sshClient": "openssh-client","sshClientVersion": "1:6.0p1-4+deb7u7", "clientIdentificationString": "SSH-2.0-OpenSSH_6.0p1 Debian-4+deb7u7", "hassh": "c0216580c330eab8906d740d31f761a8", "hasshAlgorithms": "ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1;aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se;hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-sha2-256,hmac-sha2-256-96,hmac-sha2-512,hmac-sha2-512-96,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96;none,zlib@openssh.com,zlib", "hasshVersion": "1.0", "ckex": "ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1", "ceacts": "aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se", "cmacts": "hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-sha2-256,hmac-sha2-256-96,hmac-sha2-512,hmac-sha2-512-96,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96", "ccacts": "none,zlib@openssh.com,zlib", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se", "cmastc": "hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-sha2-256,hmac-sha2-256-96,hmac-sha2-512,hmac-sha2-512-96,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96", "ccastc": "none,zlib@openssh.com,zlib"}
{"image": "debian", "imageVersion": "wheezy-slim", "sshClient": "openssh-client","sshClientVersion": "1:6.0p1-4+deb7u4", "clientIdentificationString": "SSH-2.0-OpenSSH_6.0p1 Debian-4+deb7u4", "hassh": "c0216580c330eab8906d740d31f761a8", "hasshAlgorithms": "ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1;aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se;hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-sha2-256,hmac-sha2-256-96,hmac-sha2-512,hmac-sha2-512-96,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96;none,zlib@openssh.com,zlib", "hasshVersion": "1.0", "ckex": "ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1", "ceacts": "aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se", "cmacts": "hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-sha2-256,hmac-sha2-256-96,hmac-sha2-512,hmac-sha2-512-96,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96", "ccacts": "none,zlib@openssh.com,zlib", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se", "cmastc": "hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-sha2-256,hmac-sha2-256-96,hmac-sha2-512,hmac-sha2-512-96,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96", "ccastc": "none,zlib@openssh.com,zlib"}
{"image": "debian", "imageVersion": "wheezy-backports", "sshClient": "openssh-client","sshClientVersion": "1:6.6p1-4~bpo70+1", "clientIdentificationString": "SSH-2.0-OpenSSH_6.6.1p1 Debian-4~bpo70+1", "hassh": "e30029a55fea2fcd3501023fb659bfae", "hasshAlgorithms": "curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1;aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se;hmac-md5-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-ripemd160-etm@openssh.com,hmac-sha1-96-etm@openssh.com,hmac-md5-96-etm@openssh.com,hmac-md5,hmac-sha1,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96;none,zlib@openssh.com,zlib", "hasshVersion": "1.0", "ckex": "curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1", "ceacts": "aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se", "cmacts": "hmac-md5-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-ripemd160-etm@openssh.com,hmac-sha1-96-etm@openssh.com,hmac-md5-96-etm@openssh.com,hmac-md5,hmac-sha1,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96", "ccacts": "none,zlib@openssh.com,zlib", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se", "cmastc": "hmac-md5-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-ripemd160-etm@openssh.com,hmac-sha1-96-etm@openssh.com,hmac-md5-96-etm@openssh.com,hmac-md5,hmac-sha1,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96", "ccastc": "none,zlib@openssh.com,zlib"}
{"image": "debian", "imageVersion": "jessie-slim", "sshClient": "openssh-client","sshClientVersion": "1:6.7p1-5+deb8u7", "clientIdentificationString": "SSH-2.0-OpenSSH_6.7p1 Debian-5+deb8u7", "hassh": "46c5bd9748882f1a5d75753fb7d47a61", "hasshAlgorithms": "curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1;aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1,hmac-md5-etm@openssh.com,hmac-ripemd160-etm@openssh.com,hmac-sha1-96-etm@openssh.com,hmac-md5-96-etm@openssh.com,hmac-md5,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96;none,zlib@openssh.com,zlib", "hasshVersion": "1.0", "ckex": "curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1", "ceacts": "aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se", "cmacts": "umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1,hmac-md5-etm@openssh.com,hmac-ripemd160-etm@openssh.com,hmac-sha1-96-etm@openssh.com,hmac-md5-96-etm@openssh.com,hmac-md5,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96", "ccacts": "none,zlib@openssh.com,zlib", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se", "cmastc": "umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1,hmac-md5-etm@openssh.com,hmac-ripemd160-etm@openssh.com,hmac-sha1-96-etm@openssh.com,hmac-md5-96-etm@openssh.com,hmac-md5,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96", "ccastc": "none,zlib@openssh.com,zlib"}
{"image": "debian", "imageVersion": "jessie-slim", "sshClient": "openssh-client","sshClientVersion": "1:6.7p1-5+deb8u4", "clientIdentificationString": "SSH-2.0-OpenSSH_6.7p1 Debian-5+deb8u4", "hassh": "46c5bd9748882f1a5d75753fb7d47a61", "hasshAlgorithms": "curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1;aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1,hmac-md5-etm@openssh.com,hmac-ripemd160-etm@openssh.com,hmac-sha1-96-etm@openssh.com,hmac-md5-96-etm@openssh.com,hmac-md5,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96;none,zlib@openssh.com,zlib", "hasshVersion": "1.0", "ckex": "curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1", "ceacts": "aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se", "cmacts": "umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1,hmac-md5-etm@openssh.com,hmac-ripemd160-etm@openssh.com,hmac-sha1-96-etm@openssh.com,hmac-md5-96-etm@openssh.com,hmac-md5,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96", "ccacts": "none,zlib@openssh.com,zlib", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se", "cmastc": "umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1,hmac-md5-etm@openssh.com,hmac-ripemd160-etm@openssh.com,hmac-sha1-96-etm@openssh.com,hmac-md5-96-etm@openssh.com,hmac-md5,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96", "ccastc": "none,zlib@openssh.com,zlib"}
{"image": "debian", "imageVersion": "stretch-slim", "sshClient": "openssh-client","sshClientVersion": "1:7.4p1-10+deb9u4", "clientIdentificationString": "SSH-2.0-OpenSSH_7.4p1 Debian-10+deb9u4", "hassh": "0df0d56bb50c6b2426d8d40234bf1826", "hasshAlgorithms": "curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com,zlib", "hasshVersion": "1.0", "ckex": "curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c", "ceacts": "chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc", "cmacts": "umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1", "ccacts": "none,zlib@openssh.com,zlib", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc", "cmastc": "umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1", "ccastc": "none,zlib@openssh.com,zlib"}
{"image": "debian", "imageVersion": "buster-slim", "sshClient": "openssh-client","sshClientVersion": "1:7.8p1-1", "clientIdentificationString": "SSH-2.0-OpenSSH_7.8p1 Debian-1", "hassh": "ec7378c1a92f5a8dde7e8b7a1ddf33d1", "hasshAlgorithms": "curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com,zlib", "hasshVersion": "1.0", "ckex": "curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c", "ceacts": "chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com", "cmacts": "umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1", "ccacts": "none,zlib@openssh.com,zlib", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com", "cmastc": "umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1", "ccastc": "none,zlib@openssh.com,zlib"}
{"image": "debian", "imageVersion": "sid-slim", "sshClient": "openssh-client","sshClientVersion": "1:7.8p1-1", "clientIdentificationString": "SSH-2.0-OpenSSH_7.8p1 Debian-1", "hassh": "ec7378c1a92f5a8dde7e8b7a1ddf33d1", "hasshAlgorithms": "curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com,zlib", "hasshVersion": "1.0", "ckex": "curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c", "ceacts": "chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com", "cmacts": "umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1", "ccacts": "none,zlib@openssh.com,zlib", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com", "cmastc": "umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1", "ccastc": "none,zlib@openssh.com,zlib"}
{"image": "fedora", "imageVersion": "26", "sshClient": "openssh-clients","sshClientVersion": "7.5p1-2.fc26", "clientIdentificationString": "SSH-2.0-OpenSSH_7.5", "hassh": "251479d8057683f8201e4a52b80a75ff", "hasshAlgorithms": "curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,ext-info-c;aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes256-cbc,aes128-gcm@openssh.com,aes128-ctr,aes128-cbc,3des-cbc;umac-128-etm@openssh.com,umac-128@openssh.com,hmac-sha1-etm@openssh.com,hmac-sha1,hmac-sha2-256-etm@openssh.com,hmac-sha2-256,hmac-sha2-512-etm@openssh.com,hmac-sha2-512;none,zlib@openssh.com,zlib", "hasshVersion": "1.0", "ckex": "curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,ext-info-c", "ceacts": "aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes256-cbc,aes128-gcm@openssh.com,aes128-ctr,aes128-cbc,3des-cbc", "cmacts": "umac-128-etm@openssh.com,umac-128@openssh.com,hmac-sha1-etm@openssh.com,hmac-sha1,hmac-sha2-256-etm@openssh.com,hmac-sha2-256,hmac-sha2-512-etm@openssh.com,hmac-sha2-512", "ccacts": "none,zlib@openssh.com,zlib", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes256-cbc,aes128-gcm@openssh.com,aes128-ctr,aes128-cbc,3des-cbc", "cmastc": "umac-128-etm@openssh.com,umac-128@openssh.com,hmac-sha1-etm@openssh.com,hmac-sha1,hmac-sha2-256-etm@openssh.com,hmac-sha2-256,hmac-sha2-512-etm@openssh.com,hmac-sha2-512", "ccastc": "none,zlib@openssh.com,zlib"}
{"image": "fedora", "imageVersion": "27", "sshClient": "openssh-clients","sshClientVersion": "7.5p1-5.fc27", "clientIdentificationString": "SSH-2.0-OpenSSH_7.5", "hassh": "82a9e17b13a816a13b8c8bfe1b5cf030", "hasshAlgorithms": "curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,ext-info-c;aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes256-cbc,aes128-gcm@openssh.com,aes128-ctr,aes128-cbc,3des-cbc;umac-128-etm@openssh.com,hmac-sha1-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,umac-128@openssh.com,hmac-sha1,hmac-sha2-256,hmac-sha2-512;none,zlib@openssh.com,zlib", "hasshVersion": "1.0", "ckex": "curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,ext-info-c", "ceacts": "aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes256-cbc,aes128-gcm@openssh.com,aes128-ctr,aes128-cbc,3des-cbc", "cmacts": "umac-128-etm@openssh.com,hmac-sha1-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,umac-128@openssh.com,hmac-sha1,hmac-sha2-256,hmac-sha2-512", "ccacts": "none,zlib@openssh.com,zlib", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes256-cbc,aes128-gcm@openssh.com,aes128-ctr,aes128-cbc,3des-cbc", "cmastc": "umac-128-etm@openssh.com,hmac-sha1-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,umac-128@openssh.com,hmac-sha1,hmac-sha2-256,hmac-sha2-512", "ccastc": "none,zlib@openssh.com,zlib"}
{"image": "fedora", "imageVersion": "28", "sshClient": "openssh-clients","sshClientVersion": "7.7p1-2.fc28", "clientIdentificationString": "SSH-2.0-OpenSSH_7.7", "hassh": "4eea4239dc591cbf6e661a656ae9d58c", "hasshAlgorithms": "curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,ext-info-c;aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes256-cbc,aes128-gcm@openssh.com,aes128-ctr,aes128-cbc;hmac-sha2-256-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha2-256,hmac-sha1,umac-128@openssh.com,hmac-sha2-512;none,zlib@openssh.com,zlib", "hasshVersion": "1.0", "ckex": "curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,ext-info-c", "ceacts": "aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes256-cbc,aes128-gcm@openssh.com,aes128-ctr,aes128-cbc", "cmacts": "hmac-sha2-256-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha2-256,hmac-sha1,umac-128@openssh.com,hmac-sha2-512", "ccacts": "none,zlib@openssh.com,zlib", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes256-cbc,aes128-gcm@openssh.com,aes128-ctr,aes128-cbc", "cmastc": "hmac-sha2-256-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha2-256,hmac-sha1,umac-128@openssh.com,hmac-sha2-512", "ccastc": "none,zlib@openssh.com,zlib"}
{"image": "fedora", "imageVersion": "29", "sshClient": "openssh-clients","sshClientVersion": "7.8p1-1.fc29", "clientIdentificationString": "SSH-2.0-OpenSSH_7.8", "hassh": "4eea4239dc591cbf6e661a656ae9d58c", "hasshAlgorithms": "curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,ext-info-c;aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes256-cbc,aes128-gcm@openssh.com,aes128-ctr,aes128-cbc;hmac-sha2-256-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha2-256,hmac-sha1,umac-128@openssh.com,hmac-sha2-512;none,zlib@openssh.com,zlib", "hasshVersion": "1.0", "ckex": "curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,ext-info-c", "ceacts": "aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes256-cbc,aes128-gcm@openssh.com,aes128-ctr,aes128-cbc", "cmacts": "hmac-sha2-256-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha2-256,hmac-sha1,umac-128@openssh.com,hmac-sha2-512", "ccacts": "none,zlib@openssh.com,zlib", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes256-cbc,aes128-gcm@openssh.com,aes128-ctr,aes128-cbc", "cmastc": "hmac-sha2-256-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha2-256,hmac-sha1,umac-128@openssh.com,hmac-sha2-512", "ccastc": "none,zlib@openssh.com,zlib"}
{"image": "fedora", "imageVersion": "rawhide", "sshClient": "openssh-clients","sshClientVersion": "7.8p1-2.fc30", "clientIdentificationString": "SSH-2.0-OpenSSH_7.8", "hassh": "4eea4239dc591cbf6e661a656ae9d58c", "hasshAlgorithms": "curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,ext-info-c;aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes256-cbc,aes128-gcm@openssh.com,aes128-ctr,aes128-cbc;hmac-sha2-256-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha2-256,hmac-sha1,umac-128@openssh.com,hmac-sha2-512;none,zlib@openssh.com,zlib", "hasshVersion": "1.0", "ckex": "curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,ext-info-c", "ceacts": "aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes256-cbc,aes128-gcm@openssh.com,aes128-ctr,aes128-cbc", "cmacts": "hmac-sha2-256-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha2-256,hmac-sha1,umac-128@openssh.com,hmac-sha2-512", "ccacts": "none,zlib@openssh.com,zlib", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes256-cbc,aes128-gcm@openssh.com,aes128-ctr,aes128-cbc", "cmastc": "hmac-sha2-256-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha2-256,hmac-sha1,umac-128@openssh.com,hmac-sha2-512", "ccastc": "none,zlib@openssh.com,zlib"}
{"image": "centos", "imageVersion": "6", "sshClient": "openssh-clients","sshClientVersion": "5.3p1-123.el6_9", "clientIdentificationString": "SSH-2.0-OpenSSH_5.3", "hassh": "3646f4d62498cd92721bd242ce988a42", "hasshAlgorithms": "diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1;aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se;hmac-sha1,umac-64@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96;none,zlib@openssh.com,zlib", "hasshVersion": "1.0", "ckex": "diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1", "ceacts": "aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se", "cmacts": "hmac-sha1,umac-64@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96", "ccacts": "none,zlib@openssh.com,zlib", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se", "cmastc": "hmac-sha1,umac-64@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96", "ccastc": "none,zlib@openssh.com,zlib"}
{"image": "centos", "imageVersion": "7", "sshClient": "openssh-clients","sshClientVersion": "7.4p1-16.el7", "clientIdentificationString": "SSH-2.0-OpenSSH_7.4", "hassh": "ec9ea89c70f5fc71cf61061bff5e4740", "hasshAlgorithms": "curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,ext-info-c;chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc;umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1;none,zlib@openssh.com,zlib", "hasshVersion": "1.0", "ckex": "curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,ext-info-c", "ceacts": "chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc", "cmacts": "umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1", "ccacts": "none,zlib@openssh.com,zlib", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc", "cmastc": "umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1", "ccastc": "none,zlib@openssh.com,zlib"}
{"image": "python", "imageVersion": "3.6-alpine", "sshClient": "paramiko","sshClientVersion": "2.4.1", "clientIdentificationString": "SSH-2.0-paramiko_2.4.1", "hassh": "b5752e36ba6c5979a575e43178908adf", "hasshAlgorithms": "ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1;aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,aes192-cbc,aes256-cbc,blowfish-cbc,3des-cbc;hmac-sha2-256,hmac-sha2-512,hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96;none", "hasshVersion": "1.0", "ckex": "ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1", "ceacts": "aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,aes192-cbc,aes256-cbc,blowfish-cbc,3des-cbc", "cmacts": "hmac-sha2-256,hmac-sha2-512,hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96", "ccacts": "none", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,aes192-cbc,aes256-cbc,blowfish-cbc,3des-cbc", "cmastc": "hmac-sha2-256,hmac-sha2-512,hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96", "ccastc": "none"}
{"image": "python", "imageVersion": "3.6-alpine", "sshClient": "paramiko","sshClientVersion": "2.3.0", "clientIdentificationString": "SSH-2.0-paramiko_2.3.0", "hassh": "b5752e36ba6c5979a575e43178908adf", "hasshAlgorithms": "ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1;aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,aes192-cbc,aes256-cbc,blowfish-cbc,3des-cbc;hmac-sha2-256,hmac-sha2-512,hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96;none", "hasshVersion": "1.0", "ckex": "ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1", "ceacts": "aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,aes192-cbc,aes256-cbc,blowfish-cbc,3des-cbc", "cmacts": "hmac-sha2-256,hmac-sha2-512,hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96", "ccacts": "none", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,aes192-cbc,aes256-cbc,blowfish-cbc,3des-cbc", "cmastc": "hmac-sha2-256,hmac-sha2-512,hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96", "ccastc": "none"}
{"image": "python", "imageVersion": "3.6-alpine", "sshClient": "paramiko","sshClientVersion": "2.2.0", "clientIdentificationString": "SSH-2.0-paramiko_2.2.0", "hassh": "b5752e36ba6c5979a575e43178908adf", "hasshAlgorithms": "ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1;aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,aes192-cbc,aes256-cbc,blowfish-cbc,3des-cbc;hmac-sha2-256,hmac-sha2-512,hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96;none", "hasshVersion": "1.0", "ckex": "ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1", "ceacts": "aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,aes192-cbc,aes256-cbc,blowfish-cbc,3des-cbc", "cmacts": "hmac-sha2-256,hmac-sha2-512,hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96", "ccacts": "none", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,aes192-cbc,aes256-cbc,blowfish-cbc,3des-cbc", "cmastc": "hmac-sha2-256,hmac-sha2-512,hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96", "ccastc": "none"}
{"image": "python", "imageVersion": "3.6-alpine", "sshClient": "paramiko","sshClientVersion": "2.1.0", "clientIdentificationString": "SSH-2.0-paramiko_2.1.0", "hassh": "c6f5e6d54285a11b9f02fef7fc77bd6f", "hasshAlgorithms": "diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256;aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,blowfish-cbc,aes192-cbc,aes256-cbc,3des-cbc,arcfour128,arcfour256;hmac-sha2-256,hmac-sha2-512,hmac-md5,hmac-sha1-96,hmac-md5-96,hmac-sha1;none", "hasshVersion": "1.0", "ckex": "diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256", "ceacts": "aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,blowfish-cbc,aes192-cbc,aes256-cbc,3des-cbc,arcfour128,arcfour256", "cmacts": "hmac-sha2-256,hmac-sha2-512,hmac-md5,hmac-sha1-96,hmac-md5-96,hmac-sha1", "ccacts": "none", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,blowfish-cbc,aes192-cbc,aes256-cbc,3des-cbc,arcfour128,arcfour256", "cmastc": "hmac-sha2-256,hmac-sha2-512,hmac-md5,hmac-sha1-96,hmac-md5-96,hmac-sha1", "ccastc": "none"}
{"image": "python", "imageVersion": "3.6-alpine", "sshClient": "paramiko","sshClientVersion": "2.0.0", "clientIdentificationString": "SSH-2.0-paramiko_2.0.0", "hassh": "c6f5e6d54285a11b9f02fef7fc77bd6f", "hasshAlgorithms": "diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256;aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,blowfish-cbc,aes192-cbc,aes256-cbc,3des-cbc,arcfour128,arcfour256;hmac-sha2-256,hmac-sha2-512,hmac-md5,hmac-sha1-96,hmac-md5-96,hmac-sha1;none", "hasshVersion": "1.0", "ckex": "diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256", "ceacts": "aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,blowfish-cbc,aes192-cbc,aes256-cbc,3des-cbc,arcfour128,arcfour256", "cmacts": "hmac-sha2-256,hmac-sha2-512,hmac-md5,hmac-sha1-96,hmac-md5-96,hmac-sha1", "ccacts": "none", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,blowfish-cbc,aes192-cbc,aes256-cbc,3des-cbc,arcfour128,arcfour256", "cmastc": "hmac-sha2-256,hmac-sha2-512,hmac-md5,hmac-sha1-96,hmac-md5-96,hmac-sha1", "ccastc": "none"}
{"image": "python", "imageVersion": "3.6-alpine", "sshClient": "paramiko","sshClientVersion": "1.18.0", "clientIdentificationString": "SSH-2.0-paramiko_1.18.0", "hassh": "c6f5e6d54285a11b9f02fef7fc77bd6f", "hasshAlgorithms": "diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256;aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,blowfish-cbc,aes192-cbc,aes256-cbc,3des-cbc,arcfour128,arcfour256;hmac-sha2-256,hmac-sha2-512,hmac-md5,hmac-sha1-96,hmac-md5-96,hmac-sha1;none", "hasshVersion": "1.0", "ckex": "diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256", "ceacts": "aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,blowfish-cbc,aes192-cbc,aes256-cbc,3des-cbc,arcfour128,arcfour256", "cmacts": "hmac-sha2-256,hmac-sha2-512,hmac-md5,hmac-sha1-96,hmac-md5-96,hmac-sha1", "ccacts": "none", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,blowfish-cbc,aes192-cbc,aes256-cbc,3des-cbc,arcfour128,arcfour256", "cmastc": "hmac-sha2-256,hmac-sha2-512,hmac-md5,hmac-sha1-96,hmac-md5-96,hmac-sha1", "ccastc": "none"}
{"image": "python", "imageVersion": "3.6-alpine", "sshClient": "paramiko","sshClientVersion": "1.17.0", "clientIdentificationString": "SSH-2.0-paramiko_1.17.0", "hassh": "c6f5e6d54285a11b9f02fef7fc77bd6f", "hasshAlgorithms": "diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256;aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,blowfish-cbc,aes192-cbc,aes256-cbc,3des-cbc,arcfour128,arcfour256;hmac-sha2-256,hmac-sha2-512,hmac-md5,hmac-sha1-96,hmac-md5-96,hmac-sha1;none", "hasshVersion": "1.0", "ckex": "diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256", "ceacts": "aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,blowfish-cbc,aes192-cbc,aes256-cbc,3des-cbc,arcfour128,arcfour256", "cmacts": "hmac-sha2-256,hmac-sha2-512,hmac-md5,hmac-sha1-96,hmac-md5-96,hmac-sha1", "ccacts": "none", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,blowfish-cbc,aes192-cbc,aes256-cbc,3des-cbc,arcfour128,arcfour256", "cmastc": "hmac-sha2-256,hmac-sha2-512,hmac-md5,hmac-sha1-96,hmac-md5-96,hmac-sha1", "ccastc": "none"}
{"image": "python", "imageVersion": "3.6-alpine", "sshClient": "paramiko","sshClientVersion": "1.16.0", "clientIdentificationString": "SSH-2.0-paramiko_1.16.0", "hassh": "c6f5e6d54285a11b9f02fef7fc77bd6f", "hasshAlgorithms": "diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256;aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,blowfish-cbc,aes192-cbc,aes256-cbc,3des-cbc,arcfour128,arcfour256;hmac-sha2-256,hmac-sha2-512,hmac-md5,hmac-sha1-96,hmac-md5-96,hmac-sha1;none", "hasshVersion": "1.0", "ckex": "diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256", "ceacts": "aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,blowfish-cbc,aes192-cbc,aes256-cbc,3des-cbc,arcfour128,arcfour256", "cmacts": "hmac-sha2-256,hmac-sha2-512,hmac-md5,hmac-sha1-96,hmac-md5-96,hmac-sha1", "ccacts": "none", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,blowfish-cbc,aes192-cbc,aes256-cbc,3des-cbc,arcfour128,arcfour256", "cmastc": "hmac-sha2-256,hmac-sha2-512,hmac-md5,hmac-sha1-96,hmac-md5-96,hmac-sha1", "ccastc": "none"}
{"image": "python", "imageVersion": "3.6-alpine", "sshClient": "paramiko","sshClientVersion": "1.15.0", "clientIdentificationString": "SSH-2.0-paramiko_1.15.0", "hassh": "d72f74b08466652d162ca02ad197b9ad", "hasshAlgorithms": "diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1;aes128-ctr,aes256-ctr,aes128-cbc,blowfish-cbc,aes256-cbc,3des-cbc,arcfour128,arcfour256;hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96;none", "hasshVersion": "1.0", "ckex": "diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1", "ceacts": "aes128-ctr,aes256-ctr,aes128-cbc,blowfish-cbc,aes256-cbc,3des-cbc,arcfour128,arcfour256", "cmacts": "hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96", "ccacts": "none", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "aes128-ctr,aes256-ctr,aes128-cbc,blowfish-cbc,aes256-cbc,3des-cbc,arcfour128,arcfour256", "cmastc": "hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96", "ccastc": "none"}
{"image": "python", "imageVersion": "3.6-alpine", "sshClient": "paramiko","sshClientVersion": "1.14.0", "clientIdentificationString": "SSH-2.0-paramiko_1.14.0", "hassh": "b05dfbbf26090c7792d4aa6b76cd1f1a", "hasshAlgorithms": "diffie-hellman-group1-sha1,diffie-hellman-group-exchange-sha1;aes128-ctr,aes256-ctr,aes128-cbc,blowfish-cbc,aes256-cbc,3des-cbc,arcfour128,arcfour256;hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96;none", "hasshVersion": "1.0", "ckex": "diffie-hellman-group1-sha1,diffie-hellman-group-exchange-sha1", "ceacts": "aes128-ctr,aes256-ctr,aes128-cbc,blowfish-cbc,aes256-cbc,3des-cbc,arcfour128,arcfour256", "cmacts": "hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96", "ccacts": "none", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "aes128-ctr,aes256-ctr,aes128-cbc,blowfish-cbc,aes256-cbc,3des-cbc,arcfour128,arcfour256", "cmastc": "hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96", "ccastc": "none"}
{"image": "python", "imageVersion": "3.6-alpine", "sshClient": "paramiko","sshClientVersion": "1.13.0", "clientIdentificationString": "SSH-2.0-paramiko_1.13.0", "hassh": "b05dfbbf26090c7792d4aa6b76cd1f1a", "hasshAlgorithms": "diffie-hellman-group1-sha1,diffie-hellman-group-exchange-sha1;aes128-ctr,aes256-ctr,aes128-cbc,blowfish-cbc,aes256-cbc,3des-cbc,arcfour128,arcfour256;hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96;none", "hasshVersion": "1.0", "ckex": "diffie-hellman-group1-sha1,diffie-hellman-group-exchange-sha1", "ceacts": "aes128-ctr,aes256-ctr,aes128-cbc,blowfish-cbc,aes256-cbc,3des-cbc,arcfour128,arcfour256", "cmacts": "hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96", "ccacts": "none", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "aes128-ctr,aes256-ctr,aes128-cbc,blowfish-cbc,aes256-cbc,3des-cbc,arcfour128,arcfour256", "cmastc": "hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96", "ccastc": "none"}
{"image": "alpine", "imageVersion": "3.5", "sshClient": "dropbear-dbclient","sshClientVersion": "2017.75-r0", "clientIdentificationString": "SSH-2.0-dropbear_2017.75", "hassh": "7742887e2a57712bdb91a772093f54ce", "hasshAlgorithms": "curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,kexguess2@matt.ucc.asn.au;aes128-ctr,aes256-ctr,aes128-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc,3des-ctr,3des-cbc;hmac-sha1-96,hmac-sha1,hmac-sha2-256,hmac-sha2-512,hmac-md5;zlib@openssh.com,zlib,none", "hasshVersion": "1.0", "ckex": "curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,kexguess2@matt.ucc.asn.au", "ceacts": "aes128-ctr,aes256-ctr,aes128-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc,3des-ctr,3des-cbc", "cmacts": "hmac-sha1-96,hmac-sha1,hmac-sha2-256,hmac-sha2-512,hmac-md5", "ccacts": "zlib@openssh.com,zlib,none", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "aes128-ctr,aes256-ctr,aes128-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc,3des-ctr,3des-cbc", "cmastc": "hmac-sha1-96,hmac-sha1,hmac-sha2-256,hmac-sha2-512,hmac-md5", "ccastc": "zlib@openssh.com,zlib,none"}
{"image": "alpine", "imageVersion": "3.7", "sshClient": "dropbear-dbclient","sshClientVersion": "2017.75-r1", "clientIdentificationString": "SSH-2.0-dropbear_2017.75", "hassh": "7742887e2a57712bdb91a772093f54ce", "hasshAlgorithms": "curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,kexguess2@matt.ucc.asn.au;aes128-ctr,aes256-ctr,aes128-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc,3des-ctr,3des-cbc;hmac-sha1-96,hmac-sha1,hmac-sha2-256,hmac-sha2-512,hmac-md5;zlib@openssh.com,zlib,none", "hasshVersion": "1.0", "ckex": "curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,kexguess2@matt.ucc.asn.au", "ceacts": "aes128-ctr,aes256-ctr,aes128-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc,3des-ctr,3des-cbc", "cmacts": "hmac-sha1-96,hmac-sha1,hmac-sha2-256,hmac-sha2-512,hmac-md5", "ccacts": "zlib@openssh.com,zlib,none", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "aes128-ctr,aes256-ctr,aes128-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc,3des-ctr,3des-cbc", "cmastc": "hmac-sha1-96,hmac-sha1,hmac-sha2-256,hmac-sha2-512,hmac-md5", "ccastc": "zlib@openssh.com,zlib,none"}
{"image": "alpine", "imageVersion": "3.8", "sshClient": "dropbear-dbclient","sshClientVersion": "2018.76-r2", "clientIdentificationString": "SSH-2.0-dropbear_2018.76", "hassh": "e22efe3cde8b396b874c3f13fdb6c61a", "hasshAlgorithms": "curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,kexguess2@matt.ucc.asn.au;aes128-ctr,aes256-ctr,aes128-cbc,aes256-cbc,3des-ctr,3des-cbc;hmac-sha1-96,hmac-sha1,hmac-sha2-256;zlib@openssh.com,zlib,none", "hasshVersion": "1.0", "ckex": "curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,kexguess2@matt.ucc.asn.au", "ceacts": "aes128-ctr,aes256-ctr,aes128-cbc,aes256-cbc,3des-ctr,3des-cbc", "cmacts": "hmac-sha1-96,hmac-sha1,hmac-sha2-256", "ccacts": "zlib@openssh.com,zlib,none", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "aes128-ctr,aes256-ctr,aes128-cbc,aes256-cbc,3des-ctr,3des-cbc", "cmastc": "hmac-sha1-96,hmac-sha1,hmac-sha2-256", "ccastc": "zlib@openssh.com,zlib,none"}
{"image": "ubuntu", "imageVersion": "14.04", "sshClient": "dropbear","sshClientVersion": "2013.60-1ubuntu2", "clientIdentificationString": "SSH-2.0-dropbear_2013.60", "hassh": "22865d7159a8dedcb091cd4fc5fd2841", "hasshAlgorithms": "diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,kexguess2@matt.ucc.asn.au;aes128-ctr,3des-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc;hmac-sha1-96,hmac-sha1,hmac-md5;zlib,zlib@openssh.com,none", "hasshVersion": "1.0", "ckex": "diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,kexguess2@matt.ucc.asn.au", "ceacts": "aes128-ctr,3des-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc", "cmacts": "hmac-sha1-96,hmac-sha1,hmac-md5", "ccacts": "zlib,zlib@openssh.com,none", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "aes128-ctr,3des-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc", "cmastc": "hmac-sha1-96,hmac-sha1,hmac-md5", "ccastc": "zlib,zlib@openssh.com,none"}
{"image": "ubuntu", "imageVersion": "16.04", "sshClient": "dropbear","sshClientVersion": "2016.72-1", "clientIdentificationString": "SSH-2.0-dropbear_2016.72", "hassh": "7742887e2a57712bdb91a772093f54ce", "hasshAlgorithms": "curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,kexguess2@matt.ucc.asn.au;aes128-ctr,aes256-ctr,aes128-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc,3des-ctr,3des-cbc;hmac-sha1-96,hmac-sha1,hmac-sha2-256,hmac-sha2-512,hmac-md5;zlib@openssh.com,zlib,none", "hasshVersion": "1.0", "ckex": "curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,kexguess2@matt.ucc.asn.au", "ceacts": "aes128-ctr,aes256-ctr,aes128-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc,3des-ctr,3des-cbc", "cmacts": "hmac-sha1-96,hmac-sha1,hmac-sha2-256,hmac-sha2-512,hmac-md5", "ccacts": "zlib@openssh.com,zlib,none", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "aes128-ctr,aes256-ctr,aes128-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc,3des-ctr,3des-cbc", "cmastc": "hmac-sha1-96,hmac-sha1,hmac-sha2-256,hmac-sha2-512,hmac-md5", "ccastc": "zlib@openssh.com,zlib,none"}
{"image": "ubuntu", "imageVersion": "18.04", "sshClient": "dropbear","sshClientVersion": "2017.75-3build1", "clientIdentificationString": "SSH-2.0-dropbear_2017.75", "hassh": "7742887e2a57712bdb91a772093f54ce", "hasshAlgorithms": "curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,kexguess2@matt.ucc.asn.au;aes128-ctr,aes256-ctr,aes128-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc,3des-ctr,3des-cbc;hmac-sha1-96,hmac-sha1,hmac-sha2-256,hmac-sha2-512,hmac-md5;zlib@openssh.com,zlib,none", "hasshVersion": "1.0", "ckex": "curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,kexguess2@matt.ucc.asn.au", "ceacts": "aes128-ctr,aes256-ctr,aes128-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc,3des-ctr,3des-cbc", "cmacts": "hmac-sha1-96,hmac-sha1,hmac-sha2-256,hmac-sha2-512,hmac-md5", "ccacts": "zlib@openssh.com,zlib,none", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "aes128-ctr,aes256-ctr,aes128-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc,3des-ctr,3des-cbc", "cmastc": "hmac-sha1-96,hmac-sha1,hmac-sha2-256,hmac-sha2-512,hmac-md5", "ccastc": "zlib@openssh.com,zlib,none"}
{"image": "debian", "imageVersion": "wheezy-slim", "sshClient": "dropbear","sshClientVersion": "2012.55-1.3+deb7u2", "clientIdentificationString": "SSH-2.0-dropbear_2012.55", "hassh": "16f898dd8ed8279e1055350b4e20666c", "hasshAlgorithms": "diffie-hellman-group1-sha1,diffie-hellman-group14-sha1;aes128-ctr,3des-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc;hmac-sha1-96,hmac-sha1,hmac-md5;zlib,zlib@openssh.com,none", "hasshVersion": "1.0", "ckex": "diffie-hellman-group1-sha1,diffie-hellman-group14-sha1", "ceacts": "aes128-ctr,3des-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc", "cmacts": "hmac-sha1-96,hmac-sha1,hmac-md5", "ccacts": "zlib,zlib@openssh.com,none", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "aes128-ctr,3des-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc", "cmastc": "hmac-sha1-96,hmac-sha1,hmac-md5", "ccastc": "zlib,zlib@openssh.com,none"}
{"image": "debian", "imageVersion": "wheezy-slim", "sshClient": "dropbear","sshClientVersion": "2012.55-1.3", "clientIdentificationString": "SSH-2.0-dropbear_2012.55", "hassh": "16f898dd8ed8279e1055350b4e20666c", "hasshAlgorithms": "diffie-hellman-group1-sha1,diffie-hellman-group14-sha1;aes128-ctr,3des-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc;hmac-sha1-96,hmac-sha1,hmac-md5;zlib,zlib@openssh.com,none", "hasshVersion": "1.0", "ckex": "diffie-hellman-group1-sha1,diffie-hellman-group14-sha1", "ceacts": "aes128-ctr,3des-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc", "cmacts": "hmac-sha1-96,hmac-sha1,hmac-md5", "ccacts": "zlib,zlib@openssh.com,none", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "aes128-ctr,3des-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc", "cmastc": "hmac-sha1-96,hmac-sha1,hmac-md5", "ccastc": "zlib,zlib@openssh.com,none"}
{"image": "debian", "imageVersion": "jessie-slim", "sshClient": "dropbear","sshClientVersion": "2014.65-1+deb8u3", "clientIdentificationString": "SSH-2.0-dropbear_2014.65", "hassh": "ad00edb0c2a031d9884826ba7b7ba41e", "hasshAlgorithms": "curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,kexguess2@matt.ucc.asn.au;aes128-ctr,3des-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc;hmac-sha1-96,hmac-sha1,hmac-md5;zlib,zlib@openssh.com,none", "hasshVersion": "1.0", "ckex": "curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,kexguess2@matt.ucc.asn.au", "ceacts": "aes128-ctr,3des-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc", "cmacts": "hmac-sha1-96,hmac-sha1,hmac-md5", "ccacts": "zlib,zlib@openssh.com,none", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "aes128-ctr,3des-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc", "cmastc": "hmac-sha1-96,hmac-sha1,hmac-md5", "ccastc": "zlib,zlib@openssh.com,none"}
{"image": "debian", "imageVersion": "jessie-slim", "sshClient": "dropbear","sshClientVersion": "2014.65-1+deb8u2", "clientIdentificationString": "SSH-2.0-dropbear_2014.65", "hassh": "ad00edb0c2a031d9884826ba7b7ba41e", "hasshAlgorithms": "curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,kexguess2@matt.ucc.asn.au;aes128-ctr,3des-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc;hmac-sha1-96,hmac-sha1,hmac-md5;zlib,zlib@openssh.com,none", "hasshVersion": "1.0", "ckex": "curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,kexguess2@matt.ucc.asn.au", "ceacts": "aes128-ctr,3des-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc", "cmacts": "hmac-sha1-96,hmac-sha1,hmac-md5", "ccacts": "zlib,zlib@openssh.com,none", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "aes128-ctr,3des-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc", "cmastc": "hmac-sha1-96,hmac-sha1,hmac-md5", "ccastc": "zlib,zlib@openssh.com,none"}
{"image": "debian", "imageVersion": "stretch-slim", "sshClient": "dropbear","sshClientVersion": "2016.74-5", "clientIdentificationString": "SSH-2.0-dropbear_2016.74", "hassh": "7742887e2a57712bdb91a772093f54ce", "hasshAlgorithms": "curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,kexguess2@matt.ucc.asn.au;aes128-ctr,aes256-ctr,aes128-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc,3des-ctr,3des-cbc;hmac-sha1-96,hmac-sha1,hmac-sha2-256,hmac-sha2-512,hmac-md5;zlib@openssh.com,zlib,none", "hasshVersion": "1.0", "ckex": "curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,kexguess2@matt.ucc.asn.au", "ceacts": "aes128-ctr,aes256-ctr,aes128-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc,3des-ctr,3des-cbc", "cmacts": "hmac-sha1-96,hmac-sha1,hmac-sha2-256,hmac-sha2-512,hmac-md5", "ccacts": "zlib@openssh.com,zlib,none", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "aes128-ctr,aes256-ctr,aes128-cbc,aes256-cbc,twofish256-cbc,twofish-cbc,twofish128-cbc,3des-ctr,3des-cbc", "cmastc": "hmac-sha1-96,hmac-sha1,hmac-sha2-256,hmac-sha2-512,hmac-md5", "ccastc": "zlib@openssh.com,zlib,none"}
{"image": "debian", "imageVersion": "buster-slim", "sshClient": "dropbear","sshClientVersion": "2018.76-4", "clientIdentificationString": "SSH-2.0-dropbear_2018.76", "hassh": "e22efe3cde8b396b874c3f13fdb6c61a", "hasshAlgorithms": "curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,kexguess2@matt.ucc.asn.au;aes128-ctr,aes256-ctr,aes128-cbc,aes256-cbc,3des-ctr,3des-cbc;hmac-sha1-96,hmac-sha1,hmac-sha2-256;zlib@openssh.com,zlib,none", "hasshVersion": "1.0", "ckex": "curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,kexguess2@matt.ucc.asn.au", "ceacts": "aes128-ctr,aes256-ctr,aes128-cbc,aes256-cbc,3des-ctr,3des-cbc", "cmacts": "hmac-sha1-96,hmac-sha1,hmac-sha2-256", "ccacts": "zlib@openssh.com,zlib,none", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "aes128-ctr,aes256-ctr,aes128-cbc,aes256-cbc,3des-ctr,3des-cbc", "cmastc": "hmac-sha1-96,hmac-sha1,hmac-sha2-256", "ccastc": "zlib@openssh.com,zlib,none"}
{"image": "debian", "imageVersion": "sid-slim", "sshClient": "dropbear","sshClientVersion": "2018.76-4", "clientIdentificationString": "SSH-2.0-dropbear_2018.76", "hassh": "e22efe3cde8b396b874c3f13fdb6c61a", "hasshAlgorithms": "curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,kexguess2@matt.ucc.asn.au;aes128-ctr,aes256-ctr,aes128-cbc,aes256-cbc,3des-ctr,3des-cbc;hmac-sha1-96,hmac-sha1,hmac-sha2-256;zlib@openssh.com,zlib,none", "hasshVersion": "1.0", "ckex": "curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,kexguess2@matt.ucc.asn.au", "ceacts": "aes128-ctr,aes256-ctr,aes128-cbc,aes256-cbc,3des-ctr,3des-cbc", "cmacts": "hmac-sha1-96,hmac-sha1,hmac-sha2-256", "ccacts": "zlib@openssh.com,zlib,none", "clcts": "[Empty]", "clstc": "[Empty]", "ceastc": "aes128-ctr,aes256-ctr,aes128-cbc,aes256-cbc,3des-ctr,3des-cbc", "cmastc": "hmac-sha1-96,hmac-sha1,hmac-sha2-256", "ccastc": "zlib@openssh.com,zlib,none"}

192
python/hasshGen/hasshgen.py Normal file
View File

@ -0,0 +1,192 @@
#!/usr/bin/env python3
# Copyright (c) 2018, salesforce.com, inc.
# All rights reserved.
# Licensed under the BSD 3-Clause license.
# For full license text, see the LICENSE file in the repo root
# or https://opensource.org/licenses/BSD-3-Clause
import argparse
import json
import docker
import time
from subprocess import Popen
__author__ = "Adel '0x4D31' Karimi"
__email__ = "akarimishiraz@salesforce.com"
__version__ = "1.0"
__copyright__ = "Copyright (c) 2018, salesforce.com, inc."
__license__ = "BSD 3-Clause License"
# Default command for running hassh.py
HASSH_COMMAND = 'python3 ../hassh.py -i en1 -l json -o fingerprint.json'
# Dockerfiles directory
DOCKERFILE_DIR = 'dockerfiles'
def parse_cmd_args():
"""parse command line arguments"""
desc = "A python script to automate building docker images with different\
SSH clients/versions."
parser = argparse.ArgumentParser(description=(desc))
helptxt = 'Docker image name. e.g. alpine, ubuntu'
parser.add_argument('-i', '--image', type=str, help=helptxt)
helptxt = 'Docker image version. e.g. 18.04, latest'
parser.add_argument('-iV', '--image_ver', type=str, help=helptxt)
helptxt = 'SSH client name'
parser.add_argument('-c', '--sshclient', type=str, help=helptxt)
helptxt = 'SSH client version'
parser.add_argument('-cV', '--sshclient_ver', type=str, help=helptxt)
helptxt = 'Specify the Dockerfile'
parser.add_argument('-d', '--docker_file', type=str, help=helptxt)
helptxt = 'Specify the server address to test the SSH connection'
parser.add_argument(
'-s', '--server', type=str, required=True, help=helptxt)
helptxt = 'Bulk mode; Specify an input file containing a list of docker\
image, image version, sshclient and sshclient version'
parser.add_argument('-iF', '--input_file', type=str, help=helptxt)
helptxt = 'Set this option to automatically run hassh.py for capturing SSH\
client fingerprints (HASSH). Specify the command for running hassh.py\
using --cmd arg.'
parser.add_argument(
'-f', '--fingerprint', action="store_true", help=helptxt)
helptxt = 'Enter the command for running hassh.py. Use with\
-f/--fingerprint arg'
parser.add_argument(
'--cmd', type=str, default=HASSH_COMMAND, help=helptxt)
return parser.parse_args()
def command_exec(container, server, ssh_client, rm):
"""Runs the container and exec SSH command"""
client = docker.DockerClient(
base_url='unix://var/run/docker.sock',
version='auto')
if 'openssh' in ssh_client:
cmd = ('ssh -o UserKnownHostsFile=/dev/null '
'-o StrictHostKeyChecking=no {}').format(server)
elif 'dropbear' in ssh_client:
cmd = 'dbclient -y {}'.format(server)
elif 'paramiko' in ssh_client:
cmd = 'python /tmp/paramiko_conn.py {}'.format(server)
try:
client.containers.run(container, command=cmd)
except Exception as e:
errorMsg = str(e)
pass
if ('Permission denied' in errorMsg or 'paramiko.ssh_exception' in errorMsg
or 'dbclient: Connection' in errorMsg):
out = "[+] Command successfully executed!"
else:
out = "[-] Error: {}".format(errorMsg)
# Delete the image
if rm:
client.images.remove(image=container, force=True, noprune=True)
return out
def main():
"""Intake arguments from the user to build docker images and initiate SSH
connections for generating client HASSHs"""
args = parse_cmd_args()
tag_id = 0
tag_name = "hasshgen:{img}{id}"
client = docker.DockerClient(
base_url='unix://var/run/docker.sock',
version='auto')
if args.input_file:
with open(args.input_file) as file:
input_list = json.load(file)
# Run hassh.py
proc = None
if args.fingerprint and not proc:
proc = Popen(args.cmd, shell=True)
time.sleep(1)
for record in input_list:
# Find the Dockerfile
if record['image'] in ('debian', 'ubuntu'):
docker_file = "{}/Dockerfile.debian".format(DOCKERFILE_DIR)
elif record['image'] in ('centos', 'fedora'):
docker_file = "{}/Dockerfile.centos".format(DOCKERFILE_DIR)
else:
docker_file = "{}/Dockerfile.{}".format(
DOCKERFILE_DIR,
record['image'])
# Build the docker images
tag_id += 1
container = tag_name.format(img=record['image'], id=tag_id)
try:
output = client.images.build(
path='.',
dockerfile=docker_file,
tag=container,
nocache=True,
rm=True,
forcerm=True,
buildargs={"IMAGE": record['image'],
"IMAGE_VER": record['image_ver'],
"SSHCLIENT": record['sshclient'],
"SSHCLIENT_VER": record['sshclient_ver']})
# Docker image successfully built
print("[+]", output[0], "successfully built")
print(" - image: {}:{}, ssh client: {} {}".format(
record['image'], record['image_ver'], record['sshclient'],
record['sshclient_ver']))
# Run the container and exec SSH command
out = command_exec(
container, args.server, record['sshclient'], rm=False)
if out:
print(out)
except Exception as e:
print("[-] Error:", e)
# One more command_exec to make sure all captured (bug)
command_exec(container, args.server, record['sshclient'], rm=True)
# Kill hassh.py
if proc:
proc.kill()
elif (args.image and args.image_ver and args.sshclient_ver
and args.sshclient):
container = tag_name.format(img=args.image, id=tag_id)
try:
output = client.images.build(
path='.',
dockerfile=args.docker_file,
tag=container,
nocache=True,
rm=True,
forcerm=True,
buildargs={"IMAGE": args.image,
"IMAGE_VER": args.image_ver,
"SSHCLIENT": args.sshclient,
"SSHCLIENT_VER": args.sshclient_ver})
# Docker image successfully built
print("[+]", output[0], "successfully built")
print(" - image: {}:{}, ssh client: {} {}".format(
args.image, args.image_ver, args.sshclient, args.sshclient_ver))
# Run hassh.py
proc = None
if args.fingerprint and not proc:
proc = Popen(args.cmd, shell=True)
# Run the container and exec SSH command
time.sleep(1)
out = command_exec(
container, args.server, args.sshclient, rm=False)
time.sleep(1)
# One more command_exec to make sure all captured (bug)
out = command_exec(
container, args.server, args.sshclient, rm=True)
time.sleep(1)
if out:
print(out)
# Kill hassh.py
if proc:
proc.kill()
except Exception as e:
print("[-] Error:", e)
if __name__ == '__main__':
main()

View File

@ -0,0 +1,17 @@
#!/usr/bin/env python
import paramiko
import sys
hostname = sys.argv[1]
port = 22
usr = 'user'
pwd = 'pass'
try:
client = paramiko.SSHClient()
client.load_system_host_keys()
client.set_missing_host_key_policy(paramiko.WarningPolicy())
client.connect(hostname, port=port, username=usr, password=pwd)
except paramiko.SSHException as e:
raise

View File

@ -0,0 +1,51 @@
[
{"image": "alpine", "image_ver": "3.3", "sshclient": "openssh-client", "sshclient_ver": "7.2_p2-r3"},
{"image": "alpine", "image_ver": "3.4", "sshclient": "openssh-client", "sshclient_ver": "7.2_p2-r5"},
{"image": "alpine", "image_ver": "3.5", "sshclient": "openssh-client", "sshclient_ver": "7.4_p1-r1"},
{"image": "alpine", "image_ver": "3.6", "sshclient": "openssh-client","sshclient_ver": "7.5_p1-r2"},
{"image": "alpine", "image_ver": "3.7", "sshclient": "openssh-client","sshclient_ver": "7.5_p1-r8"},
{"image": "alpine", "image_ver": "edge", "sshclient": "openssh-client","sshclient_ver": "7.8_p1-r0"},
{"image": "ubuntu", "image_ver": "14.04", "sshclient": "openssh-client","sshclient_ver": "1:6.6p1-2ubuntu2.10"},
{"image": "ubuntu", "image_ver": "16.04", "sshclient": "openssh-client","sshclient_ver": "1:7.2p2-4ubuntu2.4"},
{"image": "ubuntu", "image_ver": "18.04", "sshclient": "openssh-client","sshclient_ver": "1:7.6p1-4"},
{"image": "ubuntu", "image_ver": "18.10", "sshclient": "openssh-client","sshclient_ver": "1:7.7p1-4"},
{"image": "debian", "image_ver": "wheezy-slim", "sshclient": "openssh-client","sshclient_ver": "1:6.0p1-4+deb7u7"},
{"image": "debian", "image_ver": "wheezy-slim", "sshclient": "openssh-client","sshclient_ver": "1:6.0p1-4+deb7u4"},
{"image": "debian", "image_ver": "wheezy-backports", "sshclient": "openssh-client","sshclient_ver": "1:6.6p1-4~bpo70+1"},
{"image": "debian", "image_ver": "jessie-slim", "sshclient": "openssh-client","sshclient_ver": "1:6.7p1-5+deb8u7"},
{"image": "debian", "image_ver": "jessie-slim", "sshclient": "openssh-client","sshclient_ver": "1:6.7p1-5+deb8u4"},
{"image": "debian", "image_ver": "stretch-slim", "sshclient": "openssh-client","sshclient_ver": "1:7.4p1-10+deb9u4"},
{"image": "debian", "image_ver": "buster-slim", "sshclient": "openssh-client","sshclient_ver": "1:7.8p1-1"},
{"image": "debian", "image_ver": "sid-slim", "sshclient": "openssh-client","sshclient_ver": "1:7.8p1-1"},
{"image": "fedora", "image_ver": "26", "sshclient": "openssh-clients","sshclient_ver": "7.5p1-2.fc26"},
{"image": "fedora", "image_ver": "27", "sshclient": "openssh-clients","sshclient_ver": "7.5p1-5.fc27"},
{"image": "fedora", "image_ver": "28", "sshclient": "openssh-clients","sshclient_ver": "7.7p1-2.fc28"},
{"image": "fedora", "image_ver": "29", "sshclient": "openssh-clients","sshclient_ver": "7.8p1-1.fc29"},
{"image": "fedora", "image_ver": "rawhide", "sshclient": "openssh-clients","sshclient_ver": "7.8p1-2.fc30"},
{"image": "centos", "image_ver": "6", "sshclient": "openssh-clients","sshclient_ver": "5.3p1-123.el6_9"},
{"image": "centos", "image_ver": "7", "sshclient": "openssh-clients","sshclient_ver": "7.4p1-16.el7"},
{"image": "python", "image_ver": "3.6-alpine", "sshclient": "paramiko","sshclient_ver": "2.4.1"},
{"image": "python", "image_ver": "3.6-alpine", "sshclient": "paramiko","sshclient_ver": "2.3.0"},
{"image": "python", "image_ver": "3.6-alpine", "sshclient": "paramiko","sshclient_ver": "2.2.0"},
{"image": "python", "image_ver": "3.6-alpine", "sshclient": "paramiko","sshclient_ver": "2.1.0"},
{"image": "python", "image_ver": "3.6-alpine", "sshclient": "paramiko","sshclient_ver": "2.0.0"},
{"image": "python", "image_ver": "3.6-alpine", "sshclient": "paramiko","sshclient_ver": "1.18.0"},
{"image": "python", "image_ver": "3.6-alpine", "sshclient": "paramiko","sshclient_ver": "1.17.0"},
{"image": "python", "image_ver": "3.6-alpine", "sshclient": "paramiko","sshclient_ver": "1.16.0"},
{"image": "python", "image_ver": "3.6-alpine", "sshclient": "paramiko","sshclient_ver": "1.15.0"},
{"image": "python", "image_ver": "3.6-alpine", "sshclient": "paramiko","sshclient_ver": "1.14.0"},
{"image": "python", "image_ver": "3.6-alpine", "sshclient": "paramiko","sshclient_ver": "1.13.0"},
{"image": "alpine", "image_ver": "3.5", "sshclient": "dropbear-dbclient","sshclient_ver": "2017.75-r0"},
{"image": "alpine", "image_ver": "3.7", "sshclient": "dropbear-dbclient","sshclient_ver": "2017.75-r1"},
{"image": "alpine", "image_ver": "3.8", "sshclient": "dropbear-dbclient","sshclient_ver": "2018.76-r2"},
{"image": "ubuntu", "image_ver": "14.04", "sshclient": "dropbear","sshclient_ver": "2013.60-1ubuntu2"},
{"image": "ubuntu", "image_ver": "16.04", "sshclient": "dropbear","sshclient_ver": "2016.72-1"},
{"image": "ubuntu", "image_ver": "18.04", "sshclient": "dropbear","sshclient_ver": "2017.75-3build1"},
{"image": "debian", "image_ver": "wheezy-slim", "sshclient": "dropbear","sshclient_ver": "2012.55-1.3+deb7u2"},
{"image": "debian", "image_ver": "wheezy-slim", "sshclient": "dropbear","sshclient_ver": "2012.55-1.3"},
{"image": "debian", "image_ver": "jessie-slim", "sshclient": "dropbear","sshclient_ver": "2014.65-1+deb8u3"},
{"image": "debian", "image_ver": "jessie-slim", "sshclient": "dropbear","sshclient_ver": "2014.65-1+deb8u2"},
{"image": "debian", "image_ver": "stretch-slim", "sshclient": "dropbear","sshclient_ver": "2016.74-5"},
{"image": "debian", "image_ver": "buster-slim", "sshclient": "dropbear","sshclient_ver": "2018.76-4"},
{"image": "debian", "image_ver": "sid-slim", "sshclient": "dropbear","sshclient_ver": "2018.76-4"}
]

94
zeek/README.md Normal file
View File

@ -0,0 +1,94 @@
# hassh.zeek
[![License: BSD 3-Clause License](https://img.shields.io/badge/License-BSD%203--Clause-blue.svg)](https://opensource.org/licenses/BSD-3-Clause)
## Features
**hassh.zeek** by default will add these fields to your Zeek ssh.log file
- hasshVersion
- hassh, hasshAlgorithms
- hasshServer, hasshServerAlgorithms
- cshka (Client Host Key Algorithms), sshka (Server Host Key Algorithms)
- The script has been tested on Bro 2.5, 2.5.1, 2.5.5, 2.6.0, 2.6.1, 2.6.3, 3.0.0 and 3.1.2
- Note that Zeek (formerly bro) versions < v2.6.0 had a bug which reversed the Client/server flag , see https://github.com/zeek/zeek/pull/191. The current version of the hassh.zeek script does version checking to deal with these version issues. Failure to update Zeek and not the hassh.zeek script will result in the Server and Client packets being processed incorrectly, in effect swapping around hassh with hasshServer.
## Installation
Place hassh.zeek in zeek/share/zeek/site/hassh and add this line to your local.zeek script:
```bash
@load ./hassh
```
If running Zeek >= 3.0.0 or a Zeek product like Corelight, install by using the Zeek Package Manager with this command:
```bash
zkg install hassh
```
## Configuration
**hassh.zeek** by default will add these fields to your Zeek ssh.log file: ```hasshVersion, hassh, hasshAlgorithms, hasshServer and hasshServerAlgorithms, cshka, sshka.``` If you don't want some of these fields to be logged, simply comment those field lines out in each of the locations within hassh.zeek as shown in the code blocks below.
```bash
redef record SSH::Info += {
hasshVersion: string &log &optional;
hassh: string &log &optional;
hasshServer: string &log &optional;
# ===> Log Client variables <=== #
# Comment out any fields that are not required to be logged in their raw form to ssh.log
#ckex: string &log &optional;
cshka: string &log &optional;
#ceacts: string &log &optional;
#cmacts: string &log &optional;
#ccacts: string &log &optional;
#clcts: string &log &optional;
hasshAlgorithms: string &log &optional;
# ===> Log Server variables <=== #
# Comment out any fields that are not required to be logged in their raw form to ssh.log
#skex: string &log &optional;
sshka: string &log &optional;
#seastc: string &log &optional;
#smastc: string &log &optional;
#scastc: string &log &optional;
#slstc: string &log &optional;
hasshServerAlgorithms: string &log &optional;
};
```
```bash
if ( capabilities$is_server == T ) {
get_hassh(c, capabilities);
c$ssh$hasshVersion = c$hassh$hasshVersion;
c$ssh$hassh = c$hassh$hassh;
# ===> Log Client variables <=== #
# Comment out any fields that are not required to be logged in their raw form to ssh.log
#c$ssh$ckex = c$hassh$ckex;
c$ssh$cshka = c$hassh$cshka;
#c$ssh$ceacts = c$hassh$ceacts;
#c$ssh$cmacts = c$hassh$cmacts;
#c$ssh$ccacts = c$hassh$ccacts;
#c$ssh$clcts = c$hassh$clcts;
c$ssh$hasshAlgorithms = c$hassh$hasshAlgorithms;
}
if ( capabilities$is_server == F ) {
get_hasshServer(c, capabilities);
c$ssh$hasshVersion = c$hassh$hasshVersion;
c$ssh$hasshServer = c$hassh$hasshServer;
# ===> Log Server variables <=== #
# Comment out any fields that are not required to be logged in their raw form to ssh.log
#c$ssh$skex = c$hassh$skex;
c$ssh$sshka = c$hassh$sshka;
#c$ssh$seastc = c$hassh$seastc;
#c$ssh$smastc = c$hassh$smastc;
#c$ssh$scastc = c$hassh$scastc;
#c$ssh$slstc = c$hassh$clcts;
c$ssh$hasshServerAlgorithms = c$hassh$hasshServerAlgorithms;
}
```
After ammending the Zeek script, don't forget to reload Zeek.
```bash
zeekctl stop
zeekctl install
zeekctl start
```
## Credits:
HASSH was conceived and developed by [Ben Reardon](mailto:breardon@salesforce.com) (@benreardon) within the Detection Cloud Team at Salesforce, with inspiration and contributions from [Adel Karimi](mailto:akarimishiraz@salesforce.com) (@0x4d31) and the [JA3 crew](https://github.com/salesforce/ja3/) crew:[John B. Althouse](mailto:jalthouse@salesforce.com) , [Jeff Atkinson](mailto:jatkinson@salesforce.com) and [Josh Atkins](mailto:j.atkins@salesforce.com)

1
zeek/__load__.zeek Normal file
View File

@ -0,0 +1 @@
@load ./hassh.zeek

144
zeek/hassh.zeek Normal file
View File

@ -0,0 +1,144 @@
# HASSH #
# SSH Key Initiation Exchange Fingerprinting #
# #
# Script Version: v1.5 22 August 2019 #
# Authors: Ben Reardon (breardon@salesforce.com, @benreardon) #
# : Jeff Atkinson (jatkinson@salesforce.com) #
# : John Althouse (jalthouse@salesforce.com) #
# Description: This Zeek script appends hassh data to ssh.log #
# by enumerating the SSH_MSG_KEXINIT packets sent #
# as clear text between the client and server as part #
# of the negotiation of an SSH connection. #
# #
# Copyright (c) 2018, salesforce.com, inc. #
# All rights reserved. #
# SPDX-License-Identifier: BSD-3-Clause #
# For full license text, see the LICENSE file in the repo root or #
# https://opensource.org/licenses/BSD-3-Clause #
module SSH;
export {
type HASSHStorage: record {
hasshVersion:string &log &default="1.1"; # ANY change in hassh/hasshServer composition requires Version update
hassh: string &log &optional &default="";
hasshServer: string &log &optional &default="";
# Client variables #
ckex: string &log &optional &default="";
cshka: string &log &optional &default="";
ceacts: string &log &optional &default="";
cmacts: string &log &optional &default="";
ccacts: string &log &optional &default="";
#clcts: string &log &optional &default="";
hasshAlgorithms: string &log &optional &default="";
# Server variables #
skex: string &log &optional &default="";
sshka: string &log &optional &default="";
seastc: string &log &optional &default="";
smastc: string &log &optional &default="";
scastc: string &log &optional &default="";
#slstc: string &log &optional &default="";
hasshServerAlgorithms: string &log &optional &default="";
};
}
redef record connection += {
hassh: HASSHStorage &optional;
};
redef record SSH::Info += {
hasshVersion: string &log &optional;
hassh: string &log &optional;
hasshServer: string &log &optional;
# ===> Log Client variables <=== #
# Comment out any fields that are not required to be logged in their raw form to ssh.log
#ckex: string &log &optional;
cshka: string &log &optional;
#ceacts: string &log &optional;
#cmacts: string &log &optional;
#ccacts: string &log &optional;
#clcts: string &log &optional;
hasshAlgorithms: string &log &optional;
# ===> Log Server variables <=== #
# Comment out any fields that are not required to be logged in their raw form to ssh.log
#skex: string &log &optional;
sshka: string &log &optional;
#seastc: string &log &optional;
#smastc: string &log &optional;
#scastc: string &log &optional;
#slstc: string &log &optional;
hasshServerAlgorithms: string &log &optional;
};
# Build Client Application fingerprint #
function get_hassh(c:connection, capabilities: SSH::Capabilities ) {
c$hassh = HASSHStorage();
c$hassh$ckex = join_string_vec(capabilities$kex_algorithms,",");
c$hassh$ceacts = join_string_vec(capabilities$encryption_algorithms$client_to_server,",");
c$hassh$cmacts = join_string_vec(capabilities$mac_algorithms$client_to_server,",");
c$hassh$ccacts = join_string_vec(capabilities$compression_algorithms$client_to_server,",");
c$hassh$cshka = join_string_vec(capabilities$server_host_key_algorithms,","); # The Host key algorithm set may be useful information by itself but is not included in the hassh.
#c$hassh$clcts = join_string_vec(capabilities$languages$client_to_server,","); # The Languages field may be useful information by itself but is not included in the hasshServer.
c$hassh$hasshAlgorithms = string_cat(c$hassh$ckex,";",c$hassh$ceacts,";",c$hassh$cmacts,";",c$hassh$ccacts); # Contatenate the four selected lists of algorithms (Key,Enc,MAC,Compression) to build the Client hash
c$hassh$hassh = md5_hash(c$hassh$hasshAlgorithms);
}
# Build Server Application fingerprint #
function get_hasshServer(c:connection, capabilities: SSH::Capabilities ) {
c$hassh = HASSHStorage();
c$hassh$skex = join_string_vec(capabilities$kex_algorithms,",");
c$hassh$seastc = join_string_vec(capabilities$encryption_algorithms$server_to_client,",");
c$hassh$smastc = join_string_vec(capabilities$mac_algorithms$server_to_client,",");
c$hassh$scastc = join_string_vec(capabilities$compression_algorithms$server_to_client,",");
c$hassh$sshka = join_string_vec(capabilities$server_host_key_algorithms,","); # The Host key algorithm set may be useful information by itself but is not included in the hasshServer.
#c$hassh$slstc = join_string_vec(capabilities$languages$server_to_client,","); # The Languages field may be useful information by itself but is not included in the hasshServer.
c$hassh$hasshServerAlgorithms = string_cat(c$hassh$skex,";",c$hassh$seastc,";",c$hassh$smastc,";",c$hassh$scastc); # Contatenate the four selected lists of algorithms (Key,Enc,Message,Compression) to build the Server hash
c$hassh$hasshServer = md5_hash(c$hassh$hasshServerAlgorithms);
}
# Event #
event ssh_capabilities(c: connection, cookie: string, capabilities: SSH::Capabilities) {
if ( !c?$ssh ) {return;}
c$hassh = HASSHStorage();
# Prior to 2.6.0 Zeek has a bug which it reverses the Client/server flag.
# See https://github.com/zeek/zeek/pull/191
# The "if" statements here do a version check to account for this bug in versions older than 2.6.0
if ((Version::info$version_number < 20600 && capabilities$is_server == T) || (Version::info$version_number >= 20600 && capabilities$is_server == F) ) {
get_hassh(c, capabilities);
c$ssh$hasshVersion = c$hassh$hasshVersion;
c$ssh$hassh = c$hassh$hassh;
# ===> Log Client variables <=== #
# Comment out any fields that are not required to be logged in their raw form to ssh.log
#c$ssh$ckex = c$hassh$ckex;
c$ssh$cshka = c$hassh$cshka;
#c$ssh$ceacts = c$hassh$ceacts;
#c$ssh$cmacts = c$hassh$cmacts;
#c$ssh$ccacts = c$hassh$ccacts;
#c$ssh$clcts = c$hassh$clcts;
c$ssh$hasshAlgorithms = c$hassh$hasshAlgorithms;
}
if ( (Version::info$version_number < 20600 && capabilities$is_server == F) || (Version::info$version_number >= 20600 && capabilities$is_server == T) ) {
get_hasshServer(c, capabilities);
c$ssh$hasshVersion = c$hassh$hasshVersion;
c$ssh$hasshServer = c$hassh$hasshServer;
# ===> Log Server variables <=== #
# Comment out any fields that are not required to be logged in their raw form to ssh.log
#c$ssh$skex = c$hassh$skex;
c$ssh$sshka = c$hassh$sshka;
#c$ssh$seastc = c$hassh$seastc;
#c$ssh$smastc = c$hassh$smastc;
#c$ssh$scastc = c$hassh$scastc;
#c$ssh$slstc = c$hassh$clcts;
c$ssh$hasshServerAlgorithms = c$hassh$hasshServerAlgorithms;
}
}

5
zkg.meta Normal file
View File

@ -0,0 +1,5 @@
[package]
script_dir = zeek
description = HASSH is used to identify specific Client and Server SSH implementations. The fingerprints can be stored, searched and shared in the form of an MD5 fingerprint. This package logs components to ssh.log
tags = zeek plugin, ssh, fingerprint, logging
version = 1.0