|
Packit Service |
a04d08 |
# This file is part of cloud-init. See LICENSE file for license information.
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
from collections import namedtuple
|
|
Packit Service |
9bfd13 |
from unittest.mock import patch
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
from cloudinit import ssh_util
|
|
Packit Service |
a04d08 |
from cloudinit.tests import helpers as test_helpers
|
|
Packit Service |
a04d08 |
from cloudinit import util
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
# https://stackoverflow.com/questions/11351032/
|
|
Packit Service |
a04d08 |
FakePwEnt = namedtuple(
|
|
Packit Service |
a04d08 |
'FakePwEnt',
|
|
Packit Service |
a04d08 |
['pw_dir', 'pw_gecos', 'pw_name', 'pw_passwd', 'pw_shell', 'pwd_uid'])
|
|
Packit Service |
a04d08 |
FakePwEnt.__new__.__defaults__ = tuple(
|
|
Packit Service |
a04d08 |
"UNSET_%s" % n for n in FakePwEnt._fields)
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
9bfd13 |
# Do not use these public keys, most of them are fetched from
|
|
Packit Service |
9bfd13 |
# the testdata for OpenSSH, and their private keys are available
|
|
Packit Service |
9bfd13 |
# https://github.com/openssh/openssh-portable/tree/master/regress/unittests/sshkey/testdata
|
|
Packit Service |
a04d08 |
VALID_CONTENT = {
|
|
Packit Service |
a04d08 |
'dsa': (
|
|
Packit Service |
a04d08 |
"AAAAB3NzaC1kc3MAAACBAIrjOQSlSea19bExXBMBKBvcLhBoVvNBjCppNzllipF"
|
|
Packit Service |
a04d08 |
"W4jgIOMcNanULRrZGjkOKat6MWJNetSbV1E6IOFDQ16rQgsh/OvYU9XhzM8seLa"
|
|
Packit Service |
a04d08 |
"A21VszZuhIV7/2DE3vxu7B54zVzueG1O1Deq6goQCRGWBUnqO2yluJiG4HzrnDa"
|
|
Packit Service |
a04d08 |
"jzRAAAAFQDMPO96qXd4F5A+5b2f2MO7SpVomQAAAIBpC3K2zIbDLqBBs1fn7rsv"
|
|
Packit Service |
a04d08 |
"KcJvwihdlVjG7UXsDB76P2GNqVG+IlYPpJZ8TO/B/fzTMtrdXp9pSm9OY1+BgN4"
|
|
Packit Service |
a04d08 |
"REsZ2WNcvfgY33aWaEM+ieCcQigvxrNAF2FTVcbUIIxAn6SmHuQSWrLSfdHc8H7"
|
|
Packit Service |
a04d08 |
"hsrgeUPPdzjBD/cv2ZmqwZ1AAAAIAplIsScrJut5wJMgyK1JG0Kbw9JYQpLe95P"
|
|
Packit Service |
a04d08 |
"obB069g8+mYR8U0fysmTEdR44mMu0VNU5E5OhTYoTGfXrVrkR134LqFM2zpVVbE"
|
|
Packit Service |
a04d08 |
"JNDnIqDHxTkc6LY2vu8Y2pQ3/bVnllZZOda2oD5HQ7ovygQa6CH+fbaZHbdDUX/"
|
|
Packit Service |
a04d08 |
"5z7u2rVAlDw=="
|
|
Packit Service |
a04d08 |
),
|
|
Packit Service |
a04d08 |
'ecdsa': (
|
|
Packit Service |
a04d08 |
"AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBITrGBB3cgJ"
|
|
Packit Service |
a04d08 |
"J7fPxvtMW9H3oRisNpJ3OAslxZeyP7I0A9BPAW0RQIwHVtVnM7zrp4nI+JLZov/"
|
|
Packit Service |
a04d08 |
"Ql7lc2leWL7CY="
|
|
Packit Service |
a04d08 |
),
|
|
Packit Service |
a04d08 |
'rsa': (
|
|
Packit Service |
a04d08 |
"AAAAB3NzaC1yc2EAAAABIwAAAQEA3I7VUf2l5gSn5uavROsc5HRDpZdQueUq5oz"
|
|
Packit Service |
a04d08 |
"emNSj8T7enqKHOEaFoU2VoPgGEWC9RyzSQVeyD6s7APMcE82EtmW4skVEgEGSbD"
|
|
Packit Service |
a04d08 |
"c1pvxzxtchBj78hJP6Cf5TCMFSXw+Fz5rF1dR23QDbN1mkHs7adr8GW4kSWqU7Q"
|
|
Packit Service |
a04d08 |
"7NDwfIrJJtO7Hi42GyXtvEONHbiRPOe8stqUly7MvUoN+5kfjBM8Qqpfl2+FNhT"
|
|
Packit Service |
a04d08 |
"YWpMfYdPUnE7u536WqzFmsaqJctz3gBxH9Ex7dFtrxR4qiqEr9Qtlu3xGn7Bw07"
|
|
Packit Service |
a04d08 |
"/+i1D+ey3ONkZLN+LQ714cgj8fRS4Hj29SCmXp5Kt5/82cD/VN3NtHw=="
|
|
Packit Service |
a04d08 |
),
|
|
Packit Service |
9bfd13 |
'ed25519': (
|
|
Packit Service |
9bfd13 |
"AAAAC3NzaC1lZDI1NTE5AAAAIA1J77+CrJ8p6/vWCEzuylqJNMHUP/XmeYyGVWb"
|
|
Packit Service |
9bfd13 |
"8lnDd"
|
|
Packit Service |
9bfd13 |
),
|
|
Packit Service |
9bfd13 |
'ecdsa-sha2-nistp256-cert-v01@openssh.com': (
|
|
Packit Service |
9bfd13 |
"AAAAKGVjZHNhLXNoYTItbmlzdHAyNTYtY2VydC12MDFAb3BlbnNzaC5jb20AAAA"
|
|
Packit Service |
9bfd13 |
"gQIfwT/+UX68/hlKsdKuaOuAVB6ftTg03SlP/uH4OBEwAAAAIbmlzdHAyNTYAAA"
|
|
Packit Service |
9bfd13 |
"BBBEjA0gjJmPM6La3sXyfNlnjilvvGY6I2M8SvJj4o3X/46wcUbPWTaj4RF3EXw"
|
|
Packit Service |
9bfd13 |
"HvNxplYBwdPlk2zEecvf9Cs2BMAAAAAAAAAAAAAAAEAAAAYa2V5cy9lY2RzYS1z"
|
|
Packit Service |
9bfd13 |
"aGEyLW5pc3RwMjU2AAAAAAAAAAAAAAAA//////////8AAAAAAAAAggAAABVwZXJ"
|
|
Packit Service |
9bfd13 |
"taXQtWDExLWZvcndhcmRpbmcAAAAAAAAAF3Blcm1pdC1hZ2VudC1mb3J3YXJkaW"
|
|
Packit Service |
9bfd13 |
"5nAAAAAAAAABZwZXJtaXQtcG9ydC1mb3J3YXJkaW5nAAAAAAAAAApwZXJtaXQtc"
|
|
Packit Service |
9bfd13 |
"HR5AAAAAAAAAA5wZXJtaXQtdXNlci1yYwAAAAAAAAAAAAAAaAAAABNlY2RzYS1z"
|
|
Packit Service |
9bfd13 |
"aGEyLW5pc3RwMjU2AAAACG5pc3RwMjU2AAAAQQRH6Y9Q1+ocQ8ETKW3LjQqtxg7"
|
|
Packit Service |
9bfd13 |
"OuSSDacxmmQatQVaIawwjCbmntyEAqmVj3v9ElDSXnO5m7TyYMBQu4+vsh76RAA"
|
|
Packit Service |
9bfd13 |
"AAZQAAABNlY2RzYS1zaGEyLW5pc3RwMjU2AAAASgAAACEA47Cl2MMhr+glPGuxx"
|
|
Packit Service |
9bfd13 |
"2tM3QXkDcwdP0SxSEW5yy4XV5oAAAAhANNMm1cdVlAt3hmycQgdD82zPlg5YvVO"
|
|
Packit Service |
9bfd13 |
"iN0SQTbgVD8i"
|
|
Packit Service |
9bfd13 |
),
|
|
Packit Service |
a04d08 |
'ecdsa-sha2-nistp256': (
|
|
Packit Service |
9bfd13 |
"AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEjA0gjJmPM"
|
|
Packit Service |
9bfd13 |
"6La3sXyfNlnjilvvGY6I2M8SvJj4o3X/46wcUbPWTaj4RF3EXwHvNxplYBwdPlk"
|
|
Packit Service |
9bfd13 |
"2zEecvf9Cs2BM="
|
|
Packit Service |
751c4a |
),
|
|
Packit Service |
9bfd13 |
'ecdsa-sha2-nistp384-cert-v01@openssh.com': (
|
|
Packit Service |
9bfd13 |
"AAAAKGVjZHNhLXNoYTItbmlzdHAzODQtY2VydC12MDFAb3BlbnNzaC5jb20AAAA"
|
|
Packit Service |
9bfd13 |
"grnSvDsK1EnCZndO1IyGWcGkVgVSkPWi/XO2ybPFyLVUAAAAIbmlzdHAzODQAAA"
|
|
Packit Service |
9bfd13 |
"BhBAaYSQs+8TT0Tzciy0dorwhur6yzOGUrYQ6ueUQYWbE7eNdHmhsVrlpGPgSaY"
|
|
Packit Service |
9bfd13 |
"ByhXtAJiPOMqLU5h0eb3sCtM3ek4NvjXFTGTqPrrxJI6q0OsgrtkGE7UM9ZsfMm"
|
|
Packit Service |
9bfd13 |
"7q6BOAAAAAAAAAAAAAAAAQAAABhrZXlzL2VjZHNhLXNoYTItbmlzdHAzODQAAAA"
|
|
Packit Service |
9bfd13 |
"AAAAAAAAAAAD//////////wAAAAAAAACCAAAAFXBlcm1pdC1YMTEtZm9yd2FyZG"
|
|
Packit Service |
9bfd13 |
"luZwAAAAAAAAAXcGVybWl0LWFnZW50LWZvcndhcmRpbmcAAAAAAAAAFnBlcm1pd"
|
|
Packit Service |
9bfd13 |
"C1wb3J0LWZvcndhcmRpbmcAAAAAAAAACnBlcm1pdC1wdHkAAAAAAAAADnBlcm1p"
|
|
Packit Service |
9bfd13 |
"dC11c2VyLXJjAAAAAAAAAAAAAACIAAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAA"
|
|
Packit Service |
9bfd13 |
"IbmlzdHAzODQAAABhBLWbubcMzcWc7lMTCMGVXZlaVvUOHLjpr6SOOScFFrd8K9"
|
|
Packit Service |
9bfd13 |
"Gl8nYELST5HZ1gym65m+MG6/tbrUWIY/flLWNIe+WtqxrdPPGdIhFruCwNw2peZ"
|
|
Packit Service |
9bfd13 |
"SbQOa/o3AGnJ/vO6EKEGAAAAIQAAAATZWNkc2Etc2hhMi1uaXN0cDM4NAAAAGkA"
|
|
Packit Service |
9bfd13 |
"AAAxAL10JHd5bvnbpD+fet/k1YE1BEIrqGXaoIIJ9ReE5H4nTK1uQJzMD7+wwGK"
|
|
Packit Service |
9bfd13 |
"RVYqYQgAAADAiit0UCMDAUbjD+R2x4LvU3x/t8G3sdqDLRNfMRpjZpvcS8AwC+Y"
|
|
Packit Service |
9bfd13 |
"VFVSQNn0AyzW0="
|
|
Packit Service |
751c4a |
),
|
|
Packit Service |
b1601c |
'ecdsa-sha2-nistp384': (
|
|
Packit Service |
9bfd13 |
"AAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzODQAAABhBAaYSQs+8TT"
|
|
Packit Service |
9bfd13 |
"0Tzciy0dorwhur6yzOGUrYQ6ueUQYWbE7eNdHmhsVrlpGPgSaYByhXtAJiPOMqL"
|
|
Packit Service |
9bfd13 |
"U5h0eb3sCtM3ek4NvjXFTGTqPrrxJI6q0OsgrtkGE7UM9ZsfMm7q6BOA=="
|
|
Packit Service |
9bfd13 |
),
|
|
Packit Service |
9bfd13 |
'ecdsa-sha2-nistp521-cert-v01@openssh.com': (
|
|
Packit Service |
9bfd13 |
"AAAAKGVjZHNhLXNoYTItbmlzdHA1MjEtY2VydC12MDFAb3BlbnNzaC5jb20AAAA"
|
|
Packit Service |
9bfd13 |
"gGmRzkkMvRFk1V5U3m3mQ2nfW20SJVXk1NKnT5iZGDcEAAAAIbmlzdHA1MjEAAA"
|
|
Packit Service |
9bfd13 |
"CFBAHosAOHAI1ZkerbKYQ72S6uit1u77PCj/OalZtXgsxv0TTAZB273puG2X94C"
|
|
Packit Service |
9bfd13 |
"Q8yyNHcby87zFZHdv5BSKyZ/cyREAAeiAcSakop9VS3+bUfZpEIqwBZXarwUjnR"
|
|
Packit Service |
9bfd13 |
"nxprkcQ0rfCCdagkGZr/OA7DemK2D8tKLTHsKoEEWNImo6/pXDkFxAAAAAAAAAA"
|
|
Packit Service |
9bfd13 |
"AAAAAAQAAABhrZXlzL2VjZHNhLXNoYTItbmlzdHA1MjEAAAAAAAAAAAAAAAD///"
|
|
Packit Service |
9bfd13 |
"///////wAAAAAAAACCAAAAFXBlcm1pdC1YMTEtZm9yd2FyZGluZwAAAAAAAAAXc"
|
|
Packit Service |
9bfd13 |
"GVybWl0LWFnZW50LWZvcndhcmRpbmcAAAAAAAAAFnBlcm1pdC1wb3J0LWZvcndh"
|
|
Packit Service |
9bfd13 |
"cmRpbmcAAAAAAAAACnBlcm1pdC1wdHkAAAAAAAAADnBlcm1pdC11c2VyLXJjAAA"
|
|
Packit Service |
9bfd13 |
"AAAAAAAAAAACsAAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAA"
|
|
Packit Service |
9bfd13 |
"CFBAC6hFVXM1XEg/7qKkp5sLZuANGQVW88b5pPn2ZcK0td9IQstLH6BwWuZ6MPE"
|
|
Packit Service |
9bfd13 |
"ogiDlvx9HD1BaKGBBfkxgOY8NGFzQHbjU9eTWH3gt0RATDbZsij1pSkFPnAXdU9"
|
|
Packit Service |
9bfd13 |
"SjfogYloI2xdHaTCgWp3zgsUV+BBQ0QGGv2MqqcOmrF0f5YEJeOffAAAAKcAAAA"
|
|
Packit Service |
9bfd13 |
"TZWNkc2Etc2hhMi1uaXN0cDUyMQAAAIwAAABCAT+vSOYPuYVTDopDW08576d5Sb"
|
|
Packit Service |
9bfd13 |
"edXQMOu1op4CQIm98VKtAXvu5dfioi5VYAqpte8M+UxEMOMiQWJp+U9exYf6LuA"
|
|
Packit Service |
9bfd13 |
"AAAQgEzkIpX3yKXPaPcK17mNx40ujEDitm4ARmbhAge0sFhZtf7YIgI55b6vkI8"
|
|
Packit Service |
9bfd13 |
"JvMJkzQCBF1cpNOaIpVh1nFZNBphMQ=="
|
|
Packit Service |
9bfd13 |
),
|
|
Packit Service |
9bfd13 |
'ecdsa-sha2-nistp521': (
|
|
Packit Service |
9bfd13 |
"AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAHosAOHAI1"
|
|
Packit Service |
9bfd13 |
"ZkerbKYQ72S6uit1u77PCj/OalZtXgsxv0TTAZB273puG2X94CQ8yyNHcby87zF"
|
|
Packit Service |
9bfd13 |
"ZHdv5BSKyZ/cyREAAeiAcSakop9VS3+bUfZpEIqwBZXarwUjnRnxprkcQ0rfCCd"
|
|
Packit Service |
9bfd13 |
"agkGZr/OA7DemK2D8tKLTHsKoEEWNImo6/pXDkFxA=="
|
|
Packit Service |
9bfd13 |
),
|
|
Packit Service |
9bfd13 |
'sk-ecdsa-sha2-nistp256-cert-v01@openssh.com': (
|
|
Packit Service |
9bfd13 |
"AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIIxzuxl4z3u"
|
|
Packit Service |
9bfd13 |
"wAIslne8Huft+1n1IhHAlNbWZkQyyECCGAAAAIFOG6kY7Rf4UtCFvPwKgo/BztX"
|
|
Packit Service |
9bfd13 |
"ck2xC4a2WyA34XtIwZAAAAAAAAAAgAAAACAAAABmp1bGl1cwAAABIAAAAFaG9zd"
|
|
Packit Service |
9bfd13 |
"DEAAAAFaG9zdDIAAAAANowB8AAAAABNHmBwAAAAAAAAAAAAAAAAAAAAMwAAAAtz"
|
|
Packit Service |
9bfd13 |
"c2gtZWQyNTUxOQAAACBThupGO0X+FLQhbz8CoKPwc7V3JNsQuGtlsgN+F7SMGQA"
|
|
Packit Service |
9bfd13 |
"AAFMAAAALc3NoLWVkMjU1MTkAAABABGTn+Bmz86Ajk+iqKCSdP5NClsYzn4alJd"
|
|
Packit Service |
9bfd13 |
"0V5bizhP0Kumc/HbqQfSt684J1WdSzih+EjvnTgBhK9jTBKb90AQ=="
|
|
Packit Service |
9bfd13 |
),
|
|
Packit Service |
9bfd13 |
'sk-ecdsa-sha2-nistp256@openssh.com': (
|
|
Packit Service |
9bfd13 |
"AAAAInNrLWVjZHNhLXNoYTItbmlzdHAyNTZAb3BlbnNzaC5jb20AAAAIbmlzdHA"
|
|
Packit Service |
9bfd13 |
"yNTYAAABBBIELQJ2DgvaX1yQlKFokfWM2suuaCFI2qp0eJodHyg6O4ifxc3XpRK"
|
|
Packit Service |
9bfd13 |
"d1OS8dNYQtE/YjdXSrA+AOnMF5ns2Nkx4AAAAEc3NoOg=="
|
|
Packit Service |
9bfd13 |
),
|
|
Packit Service |
9bfd13 |
'sk-ssh-ed25519-cert-v01@openssh.com': (
|
|
Packit Service |
9bfd13 |
"AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIIxzuxl4z3u"
|
|
Packit Service |
9bfd13 |
"wAIslne8Huft+1n1IhHAlNbWZkQyyECCGAAAAIFOG6kY7Rf4UtCFvPwKgo/BztX"
|
|
Packit Service |
9bfd13 |
"ck2xC4a2WyA34XtIwZAAAAAAAAAAgAAAACAAAABmp1bGl1cwAAABIAAAAFaG9zd"
|
|
Packit Service |
9bfd13 |
"DEAAAAFaG9zdDIAAAAANowB8AAAAABNHmBwAAAAAAAAAAAAAAAAAAAAMwAAAAtz"
|
|
Packit Service |
9bfd13 |
"c2gtZWQyNTUxOQAAACBThupGO0X+FLQhbz8CoKPwc7V3JNsQuGtlsgN+F7SMGQA"
|
|
Packit Service |
9bfd13 |
"AAFMAAAALc3NoLWVkMjU1MTkAAABABGTn+Bmz86Ajk+iqKCSdP5NClsYzn4alJd"
|
|
Packit Service |
9bfd13 |
"0V5bizhP0Kumc/HbqQfSt684J1WdSzih+EjvnTgBhK9jTBKb90AQ=="
|
|
Packit Service |
9bfd13 |
),
|
|
Packit Service |
9bfd13 |
'sk-ssh-ed25519@openssh.com': (
|
|
Packit Service |
9bfd13 |
"AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAICFo/k5LU8863u66YC9"
|
|
Packit Service |
9bfd13 |
"eUO2170QduohPURkQnbLa/dczAAAABHNzaDo="
|
|
Packit Service |
9bfd13 |
),
|
|
Packit Service |
9bfd13 |
'ssh-dss-cert-v01@openssh.com': (
|
|
Packit Service |
9bfd13 |
"AAAAHHNzaC1kc3MtY2VydC12MDFAb3BlbnNzaC5jb20AAAAgdTlbNU9Hn9Qng3F"
|
|
Packit Service |
9bfd13 |
"HxwH971bxCIoq1ern/QWFFDWXgmYAAACBAPqS600VGwdPAQC/p3f0uGyrLVql0c"
|
|
Packit Service |
9bfd13 |
"Fn1zYd/JGvtabKnIYjLaYprje/NcjwI3CZFJiz4Dp3S8kLs+X5/1DMn/Tg1Y4D4"
|
|
Packit Service |
9bfd13 |
"yLB+6vCtHcJF7rVBFhvw/KZwc7G54ez3khyOtsg82fzpyOc8/mq+/+C5TMKO7DD"
|
|
Packit Service |
9bfd13 |
"jMF0k5emWKCsa3ZfAAAAFQCjA/+dKkMu4/CWjJPtfl7YNaStNQAAAIEA7uX1BVV"
|
|
Packit Service |
9bfd13 |
"tJKjLmWrpw62+l/xSXA5rr7MHBuWjiCYV3VHBfXJaQDyRDtGuEJKDwdzqYgacpG"
|
|
Packit Service |
9bfd13 |
"ApGWL/cuBtJ9nShsUl6GRG0Ra03g+Hx9VR5LviJBsjAVB4qVgciU1NGga0Bt2Le"
|
|
Packit Service |
9bfd13 |
"cd1X4EGQRBzVXeuOpiqGM6jP/I2yDMs0Pboet0AAACBAOdXpyfmobEBaOqZAuvg"
|
|
Packit Service |
9bfd13 |
"j1P0uhjG2P31Ufurv22FWPBU3A9qrkxbOXwE0LwvjCvrsQV/lrYhJz/tiys40Ve"
|
|
Packit Service |
9bfd13 |
"ahulWZE5SAHMXGIf95LiLSgaXMjko7joot+LK84ltLymwZ4QMnYjnZSSclf1Uuy"
|
|
Packit Service |
9bfd13 |
"QMcUtb34+I0u9Ycnyhp2mSFsQtAAAAAAAAAAYAAAACAAAABmp1bGl1cwAAABIAA"
|
|
Packit Service |
9bfd13 |
"AAFaG9zdDEAAAAFaG9zdDIAAAAANowB8AAAAABNHmBwAAAAAAAAAAAAAAAAAAAA"
|
|
Packit Service |
9bfd13 |
"MwAAAAtzc2gtZWQyNTUxOQAAACBThupGO0X+FLQhbz8CoKPwc7V3JNsQuGtlsgN"
|
|
Packit Service |
9bfd13 |
"+F7SMGQAAAFMAAAALc3NoLWVkMjU1MTkAAABAh/z1LIdNL1b66tQ8t9DY9BTB3B"
|
|
Packit Service |
9bfd13 |
"QKpTKmc7ezyFKLwl96yaIniZwD9Ticdbe/8i/Li3uCFE3EAt8NAIv9zff8Bg=="
|
|
Packit Service |
9bfd13 |
),
|
|
Packit Service |
9bfd13 |
'ssh-dss': (
|
|
Packit Service |
9bfd13 |
"AAAAB3NzaC1kc3MAAACBAPqS600VGwdPAQC/p3f0uGyrLVql0cFn1zYd/JGvtab"
|
|
Packit Service |
9bfd13 |
"KnIYjLaYprje/NcjwI3CZFJiz4Dp3S8kLs+X5/1DMn/Tg1Y4D4yLB+6vCtHcJF7"
|
|
Packit Service |
9bfd13 |
"rVBFhvw/KZwc7G54ez3khyOtsg82fzpyOc8/mq+/+C5TMKO7DDjMF0k5emWKCsa"
|
|
Packit Service |
9bfd13 |
"3ZfAAAAFQCjA/+dKkMu4/CWjJPtfl7YNaStNQAAAIEA7uX1BVVtJKjLmWrpw62+"
|
|
Packit Service |
9bfd13 |
"l/xSXA5rr7MHBuWjiCYV3VHBfXJaQDyRDtGuEJKDwdzqYgacpGApGWL/cuBtJ9n"
|
|
Packit Service |
9bfd13 |
"ShsUl6GRG0Ra03g+Hx9VR5LviJBsjAVB4qVgciU1NGga0Bt2Lecd1X4EGQRBzVX"
|
|
Packit Service |
9bfd13 |
"euOpiqGM6jP/I2yDMs0Pboet0AAACBAOdXpyfmobEBaOqZAuvgj1P0uhjG2P31U"
|
|
Packit Service |
9bfd13 |
"furv22FWPBU3A9qrkxbOXwE0LwvjCvrsQV/lrYhJz/tiys40VeahulWZE5SAHMX"
|
|
Packit Service |
9bfd13 |
"GIf95LiLSgaXMjko7joot+LK84ltLymwZ4QMnYjnZSSclf1UuyQMcUtb34+I0u9"
|
|
Packit Service |
9bfd13 |
"Ycnyhp2mSFsQt"
|
|
Packit Service |
9bfd13 |
),
|
|
Packit Service |
9bfd13 |
'ssh-ed25519-cert-v01@openssh.com': (
|
|
Packit Service |
9bfd13 |
"AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIIxzuxl4z3u"
|
|
Packit Service |
9bfd13 |
"wAIslne8Huft+1n1IhHAlNbWZkQyyECCGAAAAIFOG6kY7Rf4UtCFvPwKgo/BztX"
|
|
Packit Service |
9bfd13 |
"ck2xC4a2WyA34XtIwZAAAAAAAAAAgAAAACAAAABmp1bGl1cwAAABIAAAAFaG9zd"
|
|
Packit Service |
9bfd13 |
"DEAAAAFaG9zdDIAAAAANowB8AAAAABNHmBwAAAAAAAAAAAAAAAAAAAAMwAAAAtz"
|
|
Packit Service |
9bfd13 |
"c2gtZWQyNTUxOQAAACBThupGO0X+FLQhbz8CoKPwc7V3JNsQuGtlsgN+F7SMGQA"
|
|
Packit Service |
9bfd13 |
"AAFMAAAALc3NoLWVkMjU1MTkAAABABGTn+Bmz86Ajk+iqKCSdP5NClsYzn4alJd"
|
|
Packit Service |
9bfd13 |
"0V5bizhP0Kumc/HbqQfSt684J1WdSzih+EjvnTgBhK9jTBKb90AQ=="
|
|
Packit Service |
9bfd13 |
),
|
|
Packit Service |
9bfd13 |
'ssh-ed25519': (
|
|
Packit Service |
9bfd13 |
"AAAAC3NzaC1lZDI1NTE5AAAAIFOG6kY7Rf4UtCFvPwKgo/BztXck2xC4a2WyA34"
|
|
Packit Service |
9bfd13 |
"XtIwZ"
|
|
Packit Service |
9bfd13 |
),
|
|
Packit Service |
9bfd13 |
'ssh-rsa-cert-v01@openssh.com': (
|
|
Packit Service |
9bfd13 |
"AAAAHHNzaC1yc2EtY2VydC12MDFAb3BlbnNzaC5jb20AAAAg98LhS2EHxLOWCLo"
|
|
Packit Service |
9bfd13 |
"pZPwHdg/RJXusnkOqQXSc9R7aITkAAAADAQABAAAAgQDLV5lUTt7FrADseB/CGh"
|
|
Packit Service |
9bfd13 |
"EZzpoojjEW5y8+ePvLppmK3MmMI18ud6vxzpK3bwZLYkVSyfJYI0HmIuGhdu7yM"
|
|
Packit Service |
9bfd13 |
"rW6wb84gbq8C31Xoe9EORcIUuGSvDKdNSM1SjlhDquRblDFB8kToqXyx1lqrXec"
|
|
Packit Service |
9bfd13 |
"XylxIUOL0jE+u0rU1967pDJx+wAAAAAAAAAFAAAAAgAAAAZqdWxpdXMAAAASAAA"
|
|
Packit Service |
9bfd13 |
"ABWhvc3QxAAAABWhvc3QyAAAAADaMAfAAAAAATR5gcAAAAAAAAAAAAAAAAAAAAD"
|
|
Packit Service |
9bfd13 |
"MAAAALc3NoLWVkMjU1MTkAAAAgU4bqRjtF/hS0IW8/AqCj8HO1dyTbELhrZbIDf"
|
|
Packit Service |
9bfd13 |
"he0jBkAAABTAAAAC3NzaC1lZDI1NTE5AAAAQI3QGlUCzC07KorupxpDkkGy6tni"
|
|
Packit Service |
9bfd13 |
"aZ8EvBflzvv+itXWNchGvfUeHmVT6aX0sRqehdz/lR+GmXRoZBhofwh0qAM="
|
|
Packit Service |
9bfd13 |
),
|
|
Packit Service |
9bfd13 |
'ssh-rsa': (
|
|
Packit Service |
9bfd13 |
"AAAAB3NzaC1yc2EAAAADAQABAAAAgQDLV5lUTt7FrADseB/CGhEZzpoojjEW5y8"
|
|
Packit Service |
9bfd13 |
"+ePvLppmK3MmMI18ud6vxzpK3bwZLYkVSyfJYI0HmIuGhdu7yMrW6wb84gbq8C3"
|
|
Packit Service |
9bfd13 |
"1Xoe9EORcIUuGSvDKdNSM1SjlhDquRblDFB8kToqXyx1lqrXecXylxIUOL0jE+u"
|
|
Packit Service |
9bfd13 |
"0rU1967pDJx+w=="
|
|
Packit Service |
9bfd13 |
),
|
|
Packit Service |
9bfd13 |
'ssh-xmss-cert-v01@openssh.com': (
|
|
Packit Service |
9bfd13 |
"AAAAHXNzaC14bXNzLWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIM2UD0IH+Igsekq"
|
|
Packit Service |
9bfd13 |
"xjTO5f36exX4WGRMCtDGPjwfbXblxAAAAFVhNU1NfU0hBMi0yNTZfVzE2X0gxMA"
|
|
Packit Service |
9bfd13 |
"AAAEDI83/K5JMOy0BMJgQypRdz35ApAnoQinMJ8ZMoZPaEJF8Z4rANQlfzaAXum"
|
|
Packit Service |
9bfd13 |
"N3RDU5CGIUGGw+WJ904G/wwEq9CAAAAAAAAAAAAAAABAAAACWtleXMveG1zcwAA"
|
|
Packit Service |
9bfd13 |
"AAAAAAAAAAAAAP//////////AAAAAAAAAIIAAAAVcGVybWl0LVgxMS1mb3J3YXJ"
|
|
Packit Service |
9bfd13 |
"kaW5nAAAAAAAAABdwZXJtaXQtYWdlbnQtZm9yd2FyZGluZwAAAAAAAAAWcGVybW"
|
|
Packit Service |
9bfd13 |
"l0LXBvcnQtZm9yd2FyZGluZwAAAAAAAAAKcGVybWl0LXB0eQAAAAAAAAAOcGVyb"
|
|
Packit Service |
9bfd13 |
"Wl0LXVzZXItcmMAAAAAAAAAAAAAAHUAAAAUc3NoLXhtc3NAb3BlbnNzaC5jb20A"
|
|
Packit Service |
9bfd13 |
"AAAVWE1TU19TSEEyLTI1Nl9XMTZfSDEwAAAAQA+irIyT2kaOd07YWZT/QItzNBZ"
|
|
Packit Service |
9bfd13 |
"kUYwnqZJihQ7BxuyiDP4HEFbnfYnnIZXx9Asyi7vDyZRvi+AMSOzmMSq4JnkAAA"
|
|
Packit Service |
9bfd13 |
"ngAAAAFHNzaC14bXNzQG9wZW5zc2guY29tAAAJxAAAAAAFjaKTDc+7Hu2uFGIab"
|
|
Packit Service |
9bfd13 |
"3NAku8HbbGtrq/uGXOxmqxu4RaLqmwofl5iXk3nMwWEhQAb99vAc9D9ZFtfxJO4"
|
|
Packit Service |
9bfd13 |
"STYUTjbj4BxToov/uvbYfE5VeO6sMvkGglgh9YHkCTAItsG8EmGT1SIPfKYzLlN"
|
|
Packit Service |
9bfd13 |
"jvUlbcv0PaPFMJ0wzS9mNfuRf+KUhf3dxQ6zaMrBH3KEJ8Me2kNjhnh6rNPROeI"
|
|
Packit Service |
9bfd13 |
"N+IcStSKsydYuiySGKS/orsH38XysuK5QqLizbHJY3cqLbkW9LsIijb+pfEJh4Y"
|
|
Packit Service |
9bfd13 |
"bOoAbraWAv9ySnWCyRhvw2x8uJ0ZM+p5WSRiZfB3JxCpOhHgiKa9TdmdjnAtnED"
|
|
Packit Service |
9bfd13 |
"zqKOj/gM7y9mesn5ydQI0bENOGymlw0ThUGKbXMxn87Hc9dDPURUBmoO3NGjPDf"
|
|
Packit Service |
9bfd13 |
"7meS39A1ZEGtCe/pbZU9iwxqGx4wJYvB4lutRP2tYC1pA6hjQCcHibvxl5iqj+1"
|
|
Packit Service |
9bfd13 |
"jRjwPr8dbTm4PdETW/7JDSVQXKjxOT0kRLHLelJNeviGx5zSHR5PtnUP3nOBMme"
|
|
Packit Service |
9bfd13 |
"hk9DwcQW9vfKeWSnu9CMnF8xvYJxoPKQwmz0TKo+YVOUnc9/Ma+Ykseof9/W+rk"
|
|
Packit Service |
9bfd13 |
"USQGELc4x7XE5XBKYZZP2PmtxirQ3qTWFw+CeTX2Oa+jPYkzOa7jgmHJ3Fi9Xqw"
|
|
Packit Service |
9bfd13 |
"3L844vRl97e28GmwS0M1SXH+ohES0mO4EcrGh5OLyXBaRTV5QMo+4Bg6FH/HwEn"
|
|
Packit Service |
9bfd13 |
"gG1mdEOAqvctK2QC70c4lHGzfexqwQ2U6WUADPcd/BLOE8Noj1EiXYwZrSA1okZ"
|
|
Packit Service |
9bfd13 |
"FYnS/b89Uo51D2FE4A33V4gcxAglGzVNtrPulkguNT9B4jjNgdIwkTBL9k3ujkG"
|
|
Packit Service |
9bfd13 |
"og6pyYjZ0J5Jp5XPBn+y0LqrpOdZijzrc1OJbX59tTeIbDkM7Fw8As4a03hQPDU"
|
|
Packit Service |
9bfd13 |
"FTOdyMHgLnuLhLXOcqIjvW5axZL/Kx3UET8wrSHizPoa6NErCG4v5mC2M4kBSOW"
|
|
Packit Service |
9bfd13 |
"In1QV27QMaHkL/ZAa3mPsW5iFZtOVEGzw2BW4MZs0qOrcloCENZzOHiMBroKEkH"
|
|
Packit Service |
9bfd13 |
"AbzX6D1FLwml2JpXq4JXlCrdIiFm4+co5ygnWPqb4QGzMlcbjW/x/A16TthNuok"
|
|
Packit Service |
9bfd13 |
"wwlmK5ndKZ76LahyGKEwx2Nv0D+0xilEC1EldtiYRdBNlcGbU/A5EhH5bQ9KVIH"
|
|
Packit Service |
9bfd13 |
"wjWm35pRPLl5224//nqvQKhwFCn9otsR35XHXev3IQ0or3HmQxIvSDOwir1l66z"
|
|
Packit Service |
9bfd13 |
"FFrkyHMWexoucbTBxw1MN3hLb247lcVYJ5+hspJgyoYbfR5RkQVDzhpzskogP7l"
|
|
Packit Service |
9bfd13 |
"K5t0bphu+f+hpvrca7DAiiIZkcR4R1UUQoRnJPRXyXOxlxwS10b51cP9p9jzvZj"
|
|
Packit Service |
9bfd13 |
"d2LUs8yx1KXWSxNHo6WmtYONNaUfdX2OB5+QCvPULfLfFeBrqpX6Yp5wQMM5Cup"
|
|
Packit Service |
9bfd13 |
"k8FEfV07eEgQkVE9nDGKHglWo3kUdOF+XCqWAnXn0b/2bNS9/SSAz6gB1GTFcN/"
|
|
Packit Service |
9bfd13 |
"QsFGlC0QgbCJbQ7LQM6hilRWupWvN5zZ/+HJyyRHuSs5VnQnKiGbIa6AIhx7mP7"
|
|
Packit Service |
9bfd13 |
"8T82gKjU3mHLJWMGKcT3cY8R958Gs+w4OT71VJRMw3kK6qk02WCbD5OtbFeC6ib"
|
|
Packit Service |
9bfd13 |
"KRJKdLK3BzjVs/Fzu3mHVucVby3jpvG1Z8HKspKFhvV7gjFEPu8qHKi4MdAlif/"
|
|
Packit Service |
9bfd13 |
"KakyPk8yZB/dMfaxh7Kv/WpJuSwWNs7RNh29e+ZG+POxqRPWiHqiVw7P17a4dN7"
|
|
Packit Service |
9bfd13 |
"nkVOawdBEyxI4NAY+4zW+0r0bAy6zNBitBvkq3IXfr3De6Upex52sPHvK04PXoV"
|
|
Packit Service |
9bfd13 |
"RI6gjnpPSbLLjpSpcHPKgB7DWefLfhd63BUQbc57D8zm8Jd6qtmzcSKn+wz5/zT"
|
|
Packit Service |
9bfd13 |
"0I6v9I4a+DOjjyqpPpzzNU76pt+Y8SuBgHzMm1vcAdNWlbQrqtScvm0T9AkYni6"
|
|
Packit Service |
9bfd13 |
"47vSh77uwRZKDtMCMSU151tVUavXhtLYLZ6/ll5NhMXkkx8//i7pk1OBjN5LHVQ"
|
|
Packit Service |
9bfd13 |
"0QeimRmavlXU1dJ2rwsFAV+9dDdJXUNOq3VLTo9FrbOzZiWtzzjkJpVJAFREnBn"
|
|
Packit Service |
9bfd13 |
"yIDBK5AXtXE1RzfzaBHzbI2e2kO3t+CSNLWYMFYHBDqaeICYQ9+I9aO/8hnzVSo"
|
|
Packit Service |
9bfd13 |
"fp+8IfWO8iJhppqynUniicW2oCzrn4oczzYNEjImt8CGY7g90GxWfX+ZgXMJfy/"
|
|
Packit Service |
9bfd13 |
"bQiFQL3dZvVypDHEbFoIGz+sxkL83xrP4MZV1V9Wwa64lDXYv01Kp4kQXmmnAZY"
|
|
Packit Service |
9bfd13 |
"KlxBoWqYDXLeLLguSOZxDSCIDpd+YPm39wQ3wOysHW2fmsWtp6FPPlQRUYjsGIP"
|
|
Packit Service |
9bfd13 |
"lfrkJzpoeaPKDtF1m+mOULfEh9kvTKCmKRi385T9ON39D97eWqaM4CCfUGImvdR"
|
|
Packit Service |
9bfd13 |
"DlZLXvjmaAh5BVJ8VJxk75OkP14vWFFlTMv0/k4BYLDKsrNqCREC/G9nQBGcD2D"
|
|
Packit Service |
9bfd13 |
"CLwC2zPNaX2Y9dnyDs2csjN1ibsYttUMnXMgBcnCOkIkVS496Bpc0jQMf35GUgb"
|
|
Packit Service |
9bfd13 |
"PSyliwqCoXjEBP/2eyq0VLFKQ0fXGsHWvElT+Y/7RYNTiYVWttFMxN5H/2EGcgn"
|
|
Packit Service |
9bfd13 |
"lfNHLpQvXH9u/3YminS9GX30hQ7jFhpHXxkK8gZ1mpHL9K3pfKS3lG6EF9wQ23O"
|
|
Packit Service |
9bfd13 |
"qS8m995SG3dp3MzmywxXen/ukXx6bDiEl5VaOvdRUcbhr5Eb3exVDfdWiaJdTYF"
|
|
Packit Service |
9bfd13 |
"WfIfJOWx88drB3J9vFwjmuaoNEOjFsoNAMYthYOxXraXaJblvmUKz6tJ3T8/G7x"
|
|
Packit Service |
9bfd13 |
"B9QGYNBsOqBolKoKHBtsWCosLdWhEZr9VFFh2AJrOW1fx24CIkHnvfTtwYORvQq"
|
|
Packit Service |
9bfd13 |
"Ckuq2bZS1EOdsFkU/X5gwPl6gSUTNhV3IooXkBFL3iBEbfZ6JpQHVVyIuNWjIyN"
|
|
Packit Service |
9bfd13 |
"b2liCn9Nn0VHeNMMRLl7uyw4eKlOX2ogom8SLvihYxcJoqlCwtehpLsKsU4iwME"
|
|
Packit Service |
9bfd13 |
"PmDteW5GBGf4GbnqPFkpIT5ed1jGhdZt/dpsp+v6QhYH1uX4pPxdkdnuc84/yb9"
|
|
Packit Service |
9bfd13 |
"k4SQdKBJ+l3KZkfIxApNWOZqicJfz/eWwS/15hiamRKRuiiUV2zS1V+l8bV7g9O"
|
|
Packit Service |
9bfd13 |
"gy5scPBMONxtfFlGEKikZKurFmzboCOGQKRBEUCpsY44IAp443h59pQdVIb0YAS"
|
|
Packit Service |
9bfd13 |
"kfp2xKHwYij6ELRNdH5MrlFa3bNTskGO4k5XDR4cl/Sma2SXgBKb5XjTtlNmCQG"
|
|
Packit Service |
9bfd13 |
"Gv6lOW7pGXNhs5wfd8K9Ukm6KeLTIlYn1iiKM37YQpa+4JQYljCYhumbqNCkPTZ"
|
|
Packit Service |
9bfd13 |
"rNYClh8fQEQ8XuOCDpomMWu58YOTfbZNMDWs/Ou7RfCjX+VNwjPShDK9joMwWKc"
|
|
Packit Service |
9bfd13 |
"Jy3QalZbaoWtcyyvXxR2sqhVR9F7Cmasq4="
|
|
Packit Service |
9bfd13 |
),
|
|
Packit Service |
9bfd13 |
'ssh-xmss@openssh.com': (
|
|
Packit Service |
9bfd13 |
"AAAAFHNzaC14bXNzQG9wZW5zc2guY29tAAAAFVhNU1NfU0hBMi0yNTZfVzE2X0g"
|
|
Packit Service |
9bfd13 |
"xMAAAAECqptWnK94d+Sj2xcdTu8gz+75lawZoLSZFqC5IhbYuT/Z3oBZCim6yt+"
|
|
Packit Service |
9bfd13 |
"HAmk6MKldl3Fg+74v4sR/SII0I0Jv/"
|
|
Packit Service |
a04d08 |
),
|
|
Packit Service |
a04d08 |
}
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
9bfd13 |
KEY_TYPES = list(VALID_CONTENT.keys())
|
|
Packit Service |
9bfd13 |
|
|
Packit Service |
a04d08 |
TEST_OPTIONS = (
|
|
Packit Service |
a04d08 |
"no-port-forwarding,no-agent-forwarding,no-X11-forwarding,"
|
|
Packit Service |
a04d08 |
'command="echo \'Please login as the user \"ubuntu\" rather than the'
|
|
Packit Service |
a04d08 |
'user \"root\".\';echo;sleep 10"')
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
class TestAuthKeyLineParser(test_helpers.CiTestCase):
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
def test_simple_parse(self):
|
|
Packit Service |
a04d08 |
# test key line with common 3 fields (keytype, base64, comment)
|
|
Packit Service |
a04d08 |
parser = ssh_util.AuthKeyLineParser()
|
|
Packit Service |
9bfd13 |
for ktype in KEY_TYPES:
|
|
Packit Service |
a04d08 |
content = VALID_CONTENT[ktype]
|
|
Packit Service |
a04d08 |
comment = 'user-%s@host' % ktype
|
|
Packit Service |
a04d08 |
line = ' '.join((ktype, content, comment,))
|
|
Packit Service |
a04d08 |
key = parser.parse(line)
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
self.assertEqual(key.base64, content)
|
|
Packit Service |
a04d08 |
self.assertFalse(key.options)
|
|
Packit Service |
a04d08 |
self.assertEqual(key.comment, comment)
|
|
Packit Service |
a04d08 |
self.assertEqual(key.keytype, ktype)
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
def test_parse_no_comment(self):
|
|
Packit Service |
a04d08 |
# test key line with key type and base64 only
|
|
Packit Service |
a04d08 |
parser = ssh_util.AuthKeyLineParser()
|
|
Packit Service |
9bfd13 |
for ktype in KEY_TYPES:
|
|
Packit Service |
a04d08 |
content = VALID_CONTENT[ktype]
|
|
Packit Service |
a04d08 |
line = ' '.join((ktype, content,))
|
|
Packit Service |
a04d08 |
key = parser.parse(line)
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
self.assertEqual(key.base64, content)
|
|
Packit Service |
a04d08 |
self.assertFalse(key.options)
|
|
Packit Service |
a04d08 |
self.assertFalse(key.comment)
|
|
Packit Service |
a04d08 |
self.assertEqual(key.keytype, ktype)
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
def test_parse_with_keyoptions(self):
|
|
Packit Service |
a04d08 |
# test key line with options in it
|
|
Packit Service |
a04d08 |
parser = ssh_util.AuthKeyLineParser()
|
|
Packit Service |
a04d08 |
options = TEST_OPTIONS
|
|
Packit Service |
9bfd13 |
for ktype in KEY_TYPES:
|
|
Packit Service |
a04d08 |
content = VALID_CONTENT[ktype]
|
|
Packit Service |
a04d08 |
comment = 'user-%s@host' % ktype
|
|
Packit Service |
a04d08 |
line = ' '.join((options, ktype, content, comment,))
|
|
Packit Service |
a04d08 |
key = parser.parse(line)
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
self.assertEqual(key.base64, content)
|
|
Packit Service |
a04d08 |
self.assertEqual(key.options, options)
|
|
Packit Service |
a04d08 |
self.assertEqual(key.comment, comment)
|
|
Packit Service |
a04d08 |
self.assertEqual(key.keytype, ktype)
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
def test_parse_with_options_passed_in(self):
|
|
Packit Service |
a04d08 |
# test key line with key type and base64 only
|
|
Packit Service |
a04d08 |
parser = ssh_util.AuthKeyLineParser()
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
baseline = ' '.join(("rsa", VALID_CONTENT['rsa'], "user@host"))
|
|
Packit Service |
a04d08 |
myopts = "no-port-forwarding,no-agent-forwarding"
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
key = parser.parse("allowedopt" + " " + baseline)
|
|
Packit Service |
a04d08 |
self.assertEqual(key.options, "allowedopt")
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
key = parser.parse("overridden_opt " + baseline, options=myopts)
|
|
Packit Service |
a04d08 |
self.assertEqual(key.options, myopts)
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
def test_parse_invalid_keytype(self):
|
|
Packit Service |
a04d08 |
parser = ssh_util.AuthKeyLineParser()
|
|
Packit Service |
a04d08 |
key = parser.parse(' '.join(["badkeytype", VALID_CONTENT['rsa']]))
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
self.assertFalse(key.valid())
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
class TestUpdateAuthorizedKeys(test_helpers.CiTestCase):
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
def test_new_keys_replace(self):
|
|
Packit Service |
a04d08 |
"""new entries with the same base64 should replace old."""
|
|
Packit Service |
a04d08 |
orig_entries = [
|
|
Packit Service |
a04d08 |
' '.join(('rsa', VALID_CONTENT['rsa'], 'orig_comment1')),
|
|
Packit Service |
a04d08 |
' '.join(('dsa', VALID_CONTENT['dsa'], 'orig_comment2'))]
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
new_entries = [
|
|
Packit Service |
a04d08 |
' '.join(('rsa', VALID_CONTENT['rsa'], 'new_comment1')), ]
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
expected = '\n'.join([new_entries[0], orig_entries[1]]) + '\n'
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
parser = ssh_util.AuthKeyLineParser()
|
|
Packit Service |
a04d08 |
found = ssh_util.update_authorized_keys(
|
|
Packit Service |
a04d08 |
[parser.parse(p) for p in orig_entries],
|
|
Packit Service |
a04d08 |
[parser.parse(p) for p in new_entries])
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
self.assertEqual(expected, found)
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
def test_new_invalid_keys_are_ignored(self):
|
|
Packit Service |
a04d08 |
"""new entries that are invalid should be skipped."""
|
|
Packit Service |
a04d08 |
orig_entries = [
|
|
Packit Service |
a04d08 |
' '.join(('rsa', VALID_CONTENT['rsa'], 'orig_comment1')),
|
|
Packit Service |
a04d08 |
' '.join(('dsa', VALID_CONTENT['dsa'], 'orig_comment2'))]
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
new_entries = [
|
|
Packit Service |
a04d08 |
' '.join(('rsa', VALID_CONTENT['rsa'], 'new_comment1')),
|
|
Packit Service |
a04d08 |
'xxx-invalid-thing1',
|
|
Packit Service |
a04d08 |
'xxx-invalid-blob2'
|
|
Packit Service |
a04d08 |
]
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
expected = '\n'.join([new_entries[0], orig_entries[1]]) + '\n'
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
parser = ssh_util.AuthKeyLineParser()
|
|
Packit Service |
a04d08 |
found = ssh_util.update_authorized_keys(
|
|
Packit Service |
a04d08 |
[parser.parse(p) for p in orig_entries],
|
|
Packit Service |
a04d08 |
[parser.parse(p) for p in new_entries])
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
self.assertEqual(expected, found)
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
class TestParseSSHConfig(test_helpers.CiTestCase):
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
def setUp(self):
|
|
Packit Service |
a04d08 |
self.load_file_patch = patch('cloudinit.ssh_util.util.load_file')
|
|
Packit Service |
a04d08 |
self.load_file = self.load_file_patch.start()
|
|
Packit Service |
a04d08 |
self.isfile_patch = patch('cloudinit.ssh_util.os.path.isfile')
|
|
Packit Service |
a04d08 |
self.isfile = self.isfile_patch.start()
|
|
Packit Service |
a04d08 |
self.isfile.return_value = True
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
def tearDown(self):
|
|
Packit Service |
a04d08 |
self.load_file_patch.stop()
|
|
Packit Service |
a04d08 |
self.isfile_patch.stop()
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
def test_not_a_file(self):
|
|
Packit Service |
a04d08 |
self.isfile.return_value = False
|
|
Packit Service |
a04d08 |
self.load_file.side_effect = IOError
|
|
Packit Service |
a04d08 |
ret = ssh_util.parse_ssh_config('not a real file')
|
|
Packit Service |
a04d08 |
self.assertEqual([], ret)
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
def test_empty_file(self):
|
|
Packit Service |
a04d08 |
self.load_file.return_value = ''
|
|
Packit Service |
a04d08 |
ret = ssh_util.parse_ssh_config('some real file')
|
|
Packit Service |
a04d08 |
self.assertEqual([], ret)
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
def test_comment_line(self):
|
|
Packit Service |
a04d08 |
comment_line = '# This is a comment'
|
|
Packit Service |
a04d08 |
self.load_file.return_value = comment_line
|
|
Packit Service |
a04d08 |
ret = ssh_util.parse_ssh_config('some real file')
|
|
Packit Service |
a04d08 |
self.assertEqual(1, len(ret))
|
|
Packit Service |
a04d08 |
self.assertEqual(comment_line, ret[0].line)
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
def test_blank_lines(self):
|
|
Packit Service |
a04d08 |
lines = ['', '\t', ' ']
|
|
Packit Service |
a04d08 |
self.load_file.return_value = '\n'.join(lines)
|
|
Packit Service |
a04d08 |
ret = ssh_util.parse_ssh_config('some real file')
|
|
Packit Service |
a04d08 |
self.assertEqual(len(lines), len(ret))
|
|
Packit Service |
a04d08 |
for line in ret:
|
|
Packit Service |
a04d08 |
self.assertEqual('', line.line)
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
def test_lower_case_config(self):
|
|
Packit Service |
a04d08 |
self.load_file.return_value = 'foo bar'
|
|
Packit Service |
a04d08 |
ret = ssh_util.parse_ssh_config('some real file')
|
|
Packit Service |
a04d08 |
self.assertEqual(1, len(ret))
|
|
Packit Service |
a04d08 |
self.assertEqual('foo', ret[0].key)
|
|
Packit Service |
a04d08 |
self.assertEqual('bar', ret[0].value)
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
def test_upper_case_config(self):
|
|
Packit Service |
a04d08 |
self.load_file.return_value = 'Foo Bar'
|
|
Packit Service |
a04d08 |
ret = ssh_util.parse_ssh_config('some real file')
|
|
Packit Service |
a04d08 |
self.assertEqual(1, len(ret))
|
|
Packit Service |
a04d08 |
self.assertEqual('foo', ret[0].key)
|
|
Packit Service |
a04d08 |
self.assertEqual('Bar', ret[0].value)
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
def test_lower_case_with_equals(self):
|
|
Packit Service |
a04d08 |
self.load_file.return_value = 'foo=bar'
|
|
Packit Service |
a04d08 |
ret = ssh_util.parse_ssh_config('some real file')
|
|
Packit Service |
a04d08 |
self.assertEqual(1, len(ret))
|
|
Packit Service |
a04d08 |
self.assertEqual('foo', ret[0].key)
|
|
Packit Service |
a04d08 |
self.assertEqual('bar', ret[0].value)
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
def test_upper_case_with_equals(self):
|
|
Packit Service |
a04d08 |
self.load_file.return_value = 'Foo=bar'
|
|
Packit Service |
a04d08 |
ret = ssh_util.parse_ssh_config('some real file')
|
|
Packit Service |
a04d08 |
self.assertEqual(1, len(ret))
|
|
Packit Service |
a04d08 |
self.assertEqual('foo', ret[0].key)
|
|
Packit Service |
a04d08 |
self.assertEqual('bar', ret[0].value)
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
class TestUpdateSshConfigLines(test_helpers.CiTestCase):
|
|
Packit Service |
a04d08 |
"""Test the update_ssh_config_lines method."""
|
|
Packit Service |
a04d08 |
exlines = [
|
|
Packit Service |
a04d08 |
"#PasswordAuthentication yes",
|
|
Packit Service |
a04d08 |
"UsePAM yes",
|
|
Packit Service |
a04d08 |
"# Comment line",
|
|
Packit Service |
a04d08 |
"AcceptEnv LANG LC_*",
|
|
Packit Service |
a04d08 |
"X11Forwarding no",
|
|
Packit Service |
a04d08 |
]
|
|
Packit Service |
a04d08 |
pwauth = "PasswordAuthentication"
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
def check_line(self, line, opt, val):
|
|
Packit Service |
a04d08 |
self.assertEqual(line.key, opt.lower())
|
|
Packit Service |
a04d08 |
self.assertEqual(line.value, val)
|
|
Packit Service |
a04d08 |
self.assertIn(opt, str(line))
|
|
Packit Service |
a04d08 |
self.assertIn(val, str(line))
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
def test_new_option_added(self):
|
|
Packit Service |
a04d08 |
"""A single update of non-existing option."""
|
|
Packit Service |
a04d08 |
lines = ssh_util.parse_ssh_config_lines(list(self.exlines))
|
|
Packit Service |
a04d08 |
result = ssh_util.update_ssh_config_lines(lines, {'MyKey': 'MyVal'})
|
|
Packit Service |
a04d08 |
self.assertEqual(['MyKey'], result)
|
|
Packit Service |
a04d08 |
self.check_line(lines[-1], "MyKey", "MyVal")
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
def test_commented_out_not_updated_but_appended(self):
|
|
Packit Service |
a04d08 |
"""Implementation does not un-comment and update lines."""
|
|
Packit Service |
a04d08 |
lines = ssh_util.parse_ssh_config_lines(list(self.exlines))
|
|
Packit Service |
a04d08 |
result = ssh_util.update_ssh_config_lines(lines, {self.pwauth: "no"})
|
|
Packit Service |
a04d08 |
self.assertEqual([self.pwauth], result)
|
|
Packit Service |
a04d08 |
self.check_line(lines[-1], self.pwauth, "no")
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
def test_single_option_updated(self):
|
|
Packit Service |
a04d08 |
"""A single update should have change made and line updated."""
|
|
Packit Service |
a04d08 |
opt, val = ("UsePAM", "no")
|
|
Packit Service |
a04d08 |
lines = ssh_util.parse_ssh_config_lines(list(self.exlines))
|
|
Packit Service |
a04d08 |
result = ssh_util.update_ssh_config_lines(lines, {opt: val})
|
|
Packit Service |
a04d08 |
self.assertEqual([opt], result)
|
|
Packit Service |
a04d08 |
self.check_line(lines[1], opt, val)
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
def test_multiple_updates_with_add(self):
|
|
Packit Service |
a04d08 |
"""Verify multiple updates some added some changed, some not."""
|
|
Packit Service |
a04d08 |
updates = {"UsePAM": "no", "X11Forwarding": "no", "NewOpt": "newval",
|
|
Packit Service |
a04d08 |
"AcceptEnv": "LANG ADD LC_*"}
|
|
Packit Service |
a04d08 |
lines = ssh_util.parse_ssh_config_lines(list(self.exlines))
|
|
Packit Service |
a04d08 |
result = ssh_util.update_ssh_config_lines(lines, updates)
|
|
Packit Service |
a04d08 |
self.assertEqual(set(["UsePAM", "NewOpt", "AcceptEnv"]), set(result))
|
|
Packit Service |
a04d08 |
self.check_line(lines[3], "AcceptEnv", updates["AcceptEnv"])
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
def test_return_empty_if_no_changes(self):
|
|
Packit Service |
a04d08 |
"""If there are no changes, then return should be empty list."""
|
|
Packit Service |
a04d08 |
updates = {"UsePAM": "yes"}
|
|
Packit Service |
a04d08 |
lines = ssh_util.parse_ssh_config_lines(list(self.exlines))
|
|
Packit Service |
a04d08 |
result = ssh_util.update_ssh_config_lines(lines, updates)
|
|
Packit Service |
a04d08 |
self.assertEqual([], result)
|
|
Packit Service |
9bfd13 |
self.assertEqual(self.exlines, [str(line) for line in lines])
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
def test_keycase_not_modified(self):
|
|
Packit Service |
a04d08 |
"""Original case of key should not be changed on update.
|
|
Packit Service |
a04d08 |
This behavior is to keep original config as much intact as can be."""
|
|
Packit Service |
a04d08 |
updates = {"usepam": "no"}
|
|
Packit Service |
a04d08 |
lines = ssh_util.parse_ssh_config_lines(list(self.exlines))
|
|
Packit Service |
a04d08 |
result = ssh_util.update_ssh_config_lines(lines, updates)
|
|
Packit Service |
a04d08 |
self.assertEqual(["usepam"], result)
|
|
Packit Service |
a04d08 |
self.assertEqual("UsePAM no", str(lines[1]))
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
class TestUpdateSshConfig(test_helpers.CiTestCase):
|
|
Packit Service |
a04d08 |
cfgdata = '\n'.join(["#Option val", "MyKey ORIG_VAL", ""])
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
def test_modified(self):
|
|
Packit Service |
a04d08 |
mycfg = self.tmp_path("ssh_config_1")
|
|
Packit Service |
a04d08 |
util.write_file(mycfg, self.cfgdata)
|
|
Packit Service |
a04d08 |
ret = ssh_util.update_ssh_config({"MyKey": "NEW_VAL"}, mycfg)
|
|
Packit Service |
a04d08 |
self.assertTrue(ret)
|
|
Packit Service |
a04d08 |
found = util.load_file(mycfg)
|
|
Packit Service |
a04d08 |
self.assertEqual(self.cfgdata.replace("ORIG_VAL", "NEW_VAL"), found)
|
|
Packit Service |
a04d08 |
# assert there is a newline at end of file (LP: #1677205)
|
|
Packit Service |
a04d08 |
self.assertEqual('\n', found[-1])
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
def test_not_modified(self):
|
|
Packit Service |
a04d08 |
mycfg = self.tmp_path("ssh_config_2")
|
|
Packit Service |
a04d08 |
util.write_file(mycfg, self.cfgdata)
|
|
Packit Service |
a04d08 |
with patch("cloudinit.ssh_util.util.write_file") as m_write_file:
|
|
Packit Service |
a04d08 |
ret = ssh_util.update_ssh_config({"MyKey": "ORIG_VAL"}, mycfg)
|
|
Packit Service |
a04d08 |
self.assertFalse(ret)
|
|
Packit Service |
a04d08 |
self.assertEqual(self.cfgdata, util.load_file(mycfg))
|
|
Packit Service |
a04d08 |
m_write_file.assert_not_called()
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
class TestBasicAuthorizedKeyParse(test_helpers.CiTestCase):
|
|
Packit Service |
a04d08 |
def test_user(self):
|
|
Packit Service |
a04d08 |
self.assertEqual(
|
|
Packit Service |
a04d08 |
["/opt/bobby/keys"],
|
|
Packit Service |
a04d08 |
ssh_util.render_authorizedkeysfile_paths(
|
|
Packit Service |
a04d08 |
"/opt/%u/keys", "/home/bobby", "bobby"))
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
def test_multiple(self):
|
|
Packit Service |
a04d08 |
self.assertEqual(
|
|
Packit Service |
a04d08 |
["/keys/path1", "/keys/path2"],
|
|
Packit Service |
a04d08 |
ssh_util.render_authorizedkeysfile_paths(
|
|
Packit Service |
a04d08 |
"/keys/path1 /keys/path2", "/home/bobby", "bobby"))
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
def test_relative(self):
|
|
Packit Service |
a04d08 |
self.assertEqual(
|
|
Packit Service |
a04d08 |
["/home/bobby/.secret/keys"],
|
|
Packit Service |
a04d08 |
ssh_util.render_authorizedkeysfile_paths(
|
|
Packit Service |
a04d08 |
".secret/keys", "/home/bobby", "bobby"))
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
def test_home(self):
|
|
Packit Service |
a04d08 |
self.assertEqual(
|
|
Packit Service |
a04d08 |
["/homedirs/bobby/.keys"],
|
|
Packit Service |
a04d08 |
ssh_util.render_authorizedkeysfile_paths(
|
|
Packit Service |
a04d08 |
"%h/.keys", "/homedirs/bobby", "bobby"))
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
class TestMultipleSshAuthorizedKeysFile(test_helpers.CiTestCase):
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
@patch("cloudinit.ssh_util.pwd.getpwnam")
|
|
Packit Service |
a04d08 |
def test_multiple_authorizedkeys_file_order1(self, m_getpwnam):
|
|
Packit Service |
a04d08 |
fpw = FakePwEnt(pw_name='bobby', pw_dir='/home2/bobby')
|
|
Packit Service |
a04d08 |
m_getpwnam.return_value = fpw
|
|
Packit Service |
a04d08 |
authorized_keys = self.tmp_path('authorized_keys')
|
|
Packit Service |
a04d08 |
util.write_file(authorized_keys, VALID_CONTENT['rsa'])
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
user_keys = self.tmp_path('user_keys')
|
|
Packit Service |
a04d08 |
util.write_file(user_keys, VALID_CONTENT['dsa'])
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
sshd_config = self.tmp_path('sshd_config')
|
|
Packit Service |
a04d08 |
util.write_file(
|
|
Packit Service |
9bfd13 |
sshd_config,
|
|
Packit Service |
9bfd13 |
"AuthorizedKeysFile %s %s" % (authorized_keys, user_keys)
|
|
Packit Service |
9bfd13 |
)
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
(auth_key_fn, auth_key_entries) = ssh_util.extract_authorized_keys(
|
|
Packit Service |
9bfd13 |
fpw.pw_name, sshd_config)
|
|
Packit Service |
9bfd13 |
content = ssh_util.update_authorized_keys(auth_key_entries, [])
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
51236f |
self.assertEqual("%s/.ssh/authorized_keys" % fpw.pw_dir, auth_key_fn)
|
|
Packit Service |
a04d08 |
self.assertTrue(VALID_CONTENT['rsa'] in content)
|
|
Packit Service |
a04d08 |
self.assertTrue(VALID_CONTENT['dsa'] in content)
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
@patch("cloudinit.ssh_util.pwd.getpwnam")
|
|
Packit Service |
a04d08 |
def test_multiple_authorizedkeys_file_order2(self, m_getpwnam):
|
|
Packit Service |
a04d08 |
fpw = FakePwEnt(pw_name='suzie', pw_dir='/home/suzie')
|
|
Packit Service |
a04d08 |
m_getpwnam.return_value = fpw
|
|
Packit Service |
a04d08 |
authorized_keys = self.tmp_path('authorized_keys')
|
|
Packit Service |
a04d08 |
util.write_file(authorized_keys, VALID_CONTENT['rsa'])
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
user_keys = self.tmp_path('user_keys')
|
|
Packit Service |
a04d08 |
util.write_file(user_keys, VALID_CONTENT['dsa'])
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
sshd_config = self.tmp_path('sshd_config')
|
|
Packit Service |
a04d08 |
util.write_file(
|
|
Packit Service |
9bfd13 |
sshd_config,
|
|
Packit Service |
51236f |
"AuthorizedKeysFile %s %s" % (authorized_keys, user_keys)
|
|
Packit Service |
9bfd13 |
)
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
(auth_key_fn, auth_key_entries) = ssh_util.extract_authorized_keys(
|
|
Packit Service |
9bfd13 |
fpw.pw_name, sshd_config
|
|
Packit Service |
9bfd13 |
)
|
|
Packit Service |
a04d08 |
content = ssh_util.update_authorized_keys(auth_key_entries, [])
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
51236f |
self.assertEqual("%s/.ssh/authorized_keys" % fpw.pw_dir, auth_key_fn)
|
|
Packit Service |
a04d08 |
self.assertTrue(VALID_CONTENT['rsa'] in content)
|
|
Packit Service |
a04d08 |
self.assertTrue(VALID_CONTENT['dsa'] in content)
|
|
Packit Service |
a04d08 |
|
|
Packit Service |
a04d08 |
# vi: ts=4 expandtab
|