Skip to content

Allow importing multiple ssh keys when configuring users#3274

Merged
mchf merged 31 commits intomasterfrom
multiple_ssh_keys
Mar 15, 2026
Merged

Allow importing multiple ssh keys when configuring users#3274
mchf merged 31 commits intomasterfrom
multiple_ssh_keys

Conversation

@mchf
Copy link
Copy Markdown
Contributor

@mchf mchf commented Mar 13, 2026

Problem

Currently we allow to import only one ssh key for root user. We are asked to be able to 1) import multiple keys for root 2) as well for common user

Solution

  • intoduced sshPublicKeys profile / config attribute which accepts list of public keys
  • in case of root original sshPublicKey attribute is kept for backward compatibility. Internally sshPublicKey and sshPublicKeys are merged together
  • change in web UI was not requested for now

@mchf mchf force-pushed the multiple_ssh_keys branch from a0f394b to 33becb5 Compare March 13, 2026 08:38
@mchf mchf force-pushed the multiple_ssh_keys branch from 33becb5 to c843ba0 Compare March 13, 2026 08:46
@mchf mchf requested a review from imobachgs March 13, 2026 08:46
@mchf mchf force-pushed the multiple_ssh_keys branch 2 times, most recently from 80862f5 to 4b11547 Compare March 13, 2026 08:54
@mchf mchf force-pushed the multiple_ssh_keys branch from 4b11547 to 8213b9a Compare March 13, 2026 08:56
@mchf mchf force-pushed the multiple_ssh_keys branch 3 times, most recently from a03b61a to df01193 Compare March 13, 2026 09:58
@mchf mchf force-pushed the multiple_ssh_keys branch from df01193 to 33b371e Compare March 13, 2026 09:59
Copy link
Copy Markdown
Contributor

@imobachgs imobachgs left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This PR does not implement exactly what we agreed on. We expected to:

  • Extend the existing sshPublicKey attribute to support a single string or an array of strings.
  • Add an alias sshPublicKeys.

@mchf mchf force-pushed the multiple_ssh_keys branch from 852f64c to 13d46a7 Compare March 13, 2026 14:06
@mchf mchf force-pushed the multiple_ssh_keys branch from bdcc0ca to 84ed964 Compare March 13, 2026 14:46
@mchf mchf force-pushed the multiple_ssh_keys branch from 84ed964 to 4a6f56d Compare March 13, 2026 14:55
ancorgs added 3 commits March 14, 2026 20:43
We concluded that availableMethods should not be part of the system API
(since it only serves the UI) and that we need to fix the formats of the
encryption method ids. But before doing all that, this hotfix allows the
UI to properly offer TPM-based unlocking where it is available.
@mchf mchf force-pushed the multiple_ssh_keys branch from 2e83f9c to 317ee47 Compare March 14, 2026 19:56
@mchf
Copy link
Copy Markdown
Contributor Author

mchf commented Mar 14, 2026

So I've reverted the commit which changed ssh_public_keys to Vec and deleted "s" ... so now it is ssh_public_key: Option<Vec> again ... I've also modified the code to reflect change in name which was not caught during refactoring

@mchf mchf requested a review from imobachgs March 15, 2026 08:21
Copy link
Copy Markdown
Contributor

@imobachgs imobachgs left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, but I think we do not understand each other. Please, use them Option<StringOrList> in both cases. That's why I said "Please, be consistent" in my comment. The following comment was to make it clear that I did a mistake when I "quoted" the code.

@mchf
Copy link
Copy Markdown
Contributor Author

mchf commented Mar 15, 2026

Sorry, but I think we do not understand each other. Please, use them Option<StringOrList> in both cases. That's why I said "Please, be consistent" in my comment. The following comment was to make it clear that I did a mistake when I "quoted" the code.

we definitely don't understand each other. Bcs i did exactly so on frriday (Option<Vec<StringOrList>> for first user and root includin alias ssh_public_keys for both) ... here #3274 (comment) was something what looked as you wanted Option<Vec<String>> for first user, so I asked for confirmation #3274 (comment).

So to summarize that mess:

root's one:

#serde[alias=ssh_public_keys]
ssh_public_key: Option<Vec<StringOrList>>

user's one

#serde[alias=ssh_public_keys]
ssh_public_key:Option<Vec<StringOrList>>

Right?

@mchf mchf force-pushed the multiple_ssh_keys branch 3 times, most recently from 1f2dad9 to 935368b Compare March 15, 2026 18:07
@imobachgs
Copy link
Copy Markdown
Contributor

So to summarize that mess:

root's one: #serde[alias=ssh_public_keys] ssh_public_key: Option

user's one #serde[alias=ssh_public_keys] ssh_public_key:Option

Right?

No, in my comment I was just stating that the code in the PR was different for the root user and the first user. If you check #3274 (review) you can see I mentioned it was not consistent. Then I copied the current code, and I made a mistake in the second excerpt that I kind of corrected in #3274 (comment).

And, in the last review, I think it was definitely clear. Quoting from that comment:

Please, use them Option in both cases.

@imobachgs
Copy link
Copy Markdown
Contributor

Now the code looks good, please fix the conflict and we are done :-)

@mchf mchf force-pushed the multiple_ssh_keys branch from 935368b to 02d8f36 Compare March 15, 2026 18:13
@mchf
Copy link
Copy Markdown
Contributor Author

mchf commented Mar 15, 2026

No, in my comment I was just stating that the code in the PR was different for the root user and the first user. If you check #3274 (review) you can see I mentioned it was not consistent. Then I copied the current code, and I made a mistake in the second excerpt that I kind of corrected in #3274 (comment).

And, in the last review, I think it was definitely clear. Quoting from that comment:

Please, use them Option in both cases.

So some sort of misunderstanding. It happens. Nevermind

Now the code looks good, please fix the conflict and we are done :-)

this looks promising ;-) Conflict is gone ... so I'll do enough restarts in checks to make everything green and it should be done. Thanks for patience

@mchf mchf merged commit 15f1bb3 into master Mar 15, 2026
16 of 17 checks passed
@mchf mchf deleted the multiple_ssh_keys branch March 15, 2026 18:29
imobachgs added a commit that referenced this pull request Mar 16, 2026
## Problem

* #3274 added support for multiple SSH public keys (for `root` and the
first user).
* You can use `sshPublicKey` (backward compatibility reasons) or
`sshPublicKeys`.
* However, the `sshPublicKeys` alias does not work (it uses
`ssh_public_keys` instead).

## Solution

Use the correct alias.

## Testing

- *Tested manually*
@imobachgs imobachgs mentioned this pull request Mar 17, 2026
imobachgs added a commit that referenced this pull request Mar 17, 2026
Prepare to release version 19.

* #1829
* #2508
* #2772
* #2818
* #2826
* #2848
* #2860
* #2863
* #2864
* #2866
* #2867
* #2869
* #2870
* #2871
* #2872
* #2873
* #2874
* #2875
* #2876
* #2877
* #2880
* #2881
* #2882
* #2884
* #2885
* #2886
* #2891
* #2892
* #2893
* #2894
* #2895
* #2896
* #2897
* #2898
* #2899
* #2900
* #2901
* #2902
* #2903
* #2904
* #2908
* #2909
* #2910
* #2912
* #2913
* #2914
* #2915
* #2916
* #2917
* #2918
* #2920
* #2921
* #2923
* #2924
* #2926
* #2928
* #2929
* #2930
* #2933
* #2934
* #2935
* #2936
* #2937
* #2938
* #2939
* #2942
* #2943
* #2944
* #2945
* #2946
* #2947
* #2948
* #2949
* #2950
* #2951
* #2952
* #2954
* #2955
* #2956
* #2957
* #2958
* #2959
* #2960
* #2961
* #2963
* #2964
* #2965
* #2967
* #2968
* #2969
* #2970
* #2971
* #2972
* #2974
* #2975
* #2977
* #2978
* #2980
* #2981
* #2982
* #2983
* #2984
* #2988
* #2989
* #2990
* #2991
* #2992
* #2993
* #2994
* #2995
* #2996
* #2997
* #2998
* #2999
* #3000
* #3001
* #3002
* #3004
* #3005
* #3006
* #3007
* #3008
* #3009
* #3011
* #3012
* #3013
* #3014
* #3015
* #3016
* #3018
* #3019
* #3020
* #3021
* #3022
* #3023
* #3024
* #3025
* #3026
* #3027
* #3028
* #3029
* #3030
* #3031
* #3033
* #3034
* #3035
* #3036
* #3037
* #3039
* #3040
* #3041
* #3042
* #3043
* #3044
* #3045
* #3046
* #3047
* #3048
* #3049
* #3050
* #3051
* #3052
* #3053
* #3054
* #3055
* #3056
* #3057
* #3058
* #3060
* #3061
* #3062
* #3063
* #3064
* #3065
* #3066
* #3067
* #3068
* #3069
* #3070
* #3071
* #3072
* #3073
* #3074
* #3075
* #3076
* #3077
* #3078
* #3079
* #3086
* #3087
* #3088
* #3089
* #3090
* #3091
* #3092
* #3093
* #3094
* #3095
* #3096
* #3097
* #3098
* #3099
* #3100
* #3101
* #3102
* #3103
* #3104
* #3105
* #3106
* #3107
* #3108
* #3109
* #3110
* #3112
* #3113
* #3114
* #3115
* #3116
* #3117
* #3118
* #3119
* #3120
* #3122
* #3123
* #3124
* #3127
* #3128
* #3129
* #3130
* #3131
* #3133
* #3134
* #3135
* #3136
* #3137
* #3138
* #3139
* #3140
* #3141
* #3142
* #3143
* #3144
* #3145
* #3146
* #3147
* #3148
* #3149
* #3150
* #3151
* #3152
* #3153
* #3154
* #3155
* #3157
* #3158
* #3159
* #3160
* #3161
* #3162
* #3163
* #3164
* #3165
* #3166
* #3167
* #3168
* #3169
* #3170
* #3174
* #3175
* #3176
* #3177
* #3178
* #3179
* #3181
* #3182
* #3184
* #3185
* #3186
* #3188
* #3189
* #3190
* #3191
* #3192
* #3194
* #3195
* #3196
* #3197
* #3198
* #3199
* #3200
* #3201
* #3202
* #3203
* #3205
* #3206
* #3208
* #3209
* #3210
* #3213
* #3214
* #3215
* #3216
* #3217
* #3218
* #3219
* #3220
* #3222
* #3223
* #3224
* #3225
* #3226
* #3227
* #3228
* #3229
* #3230
* #3231
* #3232
* #3233
* #3234
* #3235
* #3236
* #3237
* #3238
* #3239
* #3240
* #3241
* #3242
* #3243
* #3244
* #3246
* #3247
* #3248
* #3250
* #3251
* #3252
* #3253
* #3254
* #3255
* #3256
* #3257
* #3258
* #3259
* #3260
* #3261
* #3262
* #3263
* #3265
* #3266
* #3267
* #3268
* #3269
* #3270
* #3271
* #3272
* #3273
* #3274
* #3275
* #3276
* #3277
* #3278
* #3279
* #3280
* #3281
* #3282
* #3283
* #3284
* #3285
* #3286
* #3287
* #3288
* #3289
* #3290
* #3291
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants