diff --git a/interface-definitions/include/pki/cli-certificate-base64.xml.i b/interface-definitions/include/pki/cli-certificate-base64.xml.i
new file mode 100644
index 000000000..a3eff79e8
--- /dev/null
+++ b/interface-definitions/include/pki/cli-certificate-base64.xml.i
@@ -0,0 +1,11 @@
+<!-- include start from pki/cli-certificate-base64.xml.i -->
+<leafNode name="certificate">
+  <properties>
+    <help>Certificate in PEM format</help>
+    <constraint>
+      <validator name="base64"/>
+    </constraint>
+    <constraintErrorMessage>Certificate is not base64-encoded</constraintErrorMessage>
+  </properties>
+</leafNode>
+<!-- include end -->
diff --git a/interface-definitions/include/pki/cli-private-key-base64.xml.i b/interface-definitions/include/pki/cli-private-key-base64.xml.i
new file mode 100644
index 000000000..3a7ee0ce9
--- /dev/null
+++ b/interface-definitions/include/pki/cli-private-key-base64.xml.i
@@ -0,0 +1,11 @@
+<!-- include start from pki/pki-cli-private-key.xml.i -->
+<leafNode name="key">
+  <properties>
+    <help>Private key in PEM format</help>
+    <constraint>
+      <validator name="base64"/>
+    </constraint>
+    <constraintErrorMessage>Private key is not base64-encoded</constraintErrorMessage>
+  </properties>
+</leafNode>
+<!-- include end -->
diff --git a/interface-definitions/include/pki/cli-public-key-base64.xml.i b/interface-definitions/include/pki/cli-public-key-base64.xml.i
new file mode 100644
index 000000000..3a7ee0ce9
--- /dev/null
+++ b/interface-definitions/include/pki/cli-public-key-base64.xml.i
@@ -0,0 +1,11 @@
+<!-- include start from pki/pki-cli-private-key.xml.i -->
+<leafNode name="key">
+  <properties>
+    <help>Private key in PEM format</help>
+    <constraint>
+      <validator name="base64"/>
+    </constraint>
+    <constraintErrorMessage>Private key is not base64-encoded</constraintErrorMessage>
+  </properties>
+</leafNode>
+<!-- include end -->
diff --git a/interface-definitions/include/pki/cli-revoke.xml.i b/interface-definitions/include/pki/cli-revoke.xml.i
new file mode 100644
index 000000000..61cd978bb
--- /dev/null
+++ b/interface-definitions/include/pki/cli-revoke.xml.i
@@ -0,0 +1,8 @@
+<!-- include start from pki/cli-revoke.xml.i -->
+<leafNode name="revoke">
+  <properties>
+    <help>Include certificate in parent CRL</help>
+    <valueless/>
+  </properties>
+</leafNode>
+<!-- include end -->
diff --git a/interface-definitions/include/pki/password-protected.xml.i b/interface-definitions/include/pki/password-protected.xml.i
new file mode 100644
index 000000000..b72e4ecec
--- /dev/null
+++ b/interface-definitions/include/pki/password-protected.xml.i
@@ -0,0 +1,8 @@
+<!-- include start from pki/password-protected.xml.i -->
+<leafNode name="password-protected">
+  <properties>
+    <help>Private key portion is password protected</help>
+    <valueless/>
+  </properties>
+</leafNode>
+<!-- include end -->
diff --git a/interface-definitions/pki.xml.in b/interface-definitions/pki.xml.in
index 0ed199539..617bdd584 100644
--- a/interface-definitions/pki.xml.in
+++ b/interface-definitions/pki.xml.in
@@ -1,297 +1,248 @@
 <?xml version="1.0"?>
 <interfaceDefinition>
   <node name="pki" owner="${vyos_conf_scripts_dir}/pki.py">
     <properties>
       <help>VyOS PKI configuration</help>
       <priority>300</priority>
     </properties>
     <children>
       <tagNode name="ca">
         <properties>
           <help>Certificate Authority</help>
           <constraint>
             #include <include/constraint/alpha-numeric-hyphen-underscore-dot.xml.i>
           </constraint>
         </properties>
         <children>
-          <leafNode name="certificate">
-            <properties>
-              <help>CA certificate in PEM format</help>
-              <constraint>
-                <validator name="base64"/>
-              </constraint>
-              <constraintErrorMessage>CA certificate is not base64-encoded</constraintErrorMessage>
-            </properties>
-          </leafNode>
+          #include <include/pki/cli-certificate-base64.xml.i>
           #include <include/generic-description.xml.i>
           <node name="private">
             <properties>
               <help>CA private key in PEM format</help>
             </properties>
             <children>
-              <leafNode name="key">
-                <properties>
-                  <help>CA private key in PEM format</help>
-                  <constraint>
-                    <validator name="base64"/>
-                  </constraint>
-                  <constraintErrorMessage>CA private key is not base64-encoded</constraintErrorMessage>
-                </properties>
-              </leafNode>
-              <leafNode name="password-protected">
-                <properties>
-                  <help>CA private key is password protected</help>
-                  <valueless/>
-                </properties>
-              </leafNode>
+              #include <include/pki/cli-private-key-base64.xml.i>
+              #include <include/pki/password-protected.xml.i>
             </children>
           </node>
           <leafNode name="crl">
             <properties>
               <help>Certificate revocation list in PEM format</help>
               <constraint>
                 <validator name="base64"/>
               </constraint>
               <constraintErrorMessage>CRL is not base64-encoded</constraintErrorMessage>
               <multi/>
             </properties>
           </leafNode>
-          <leafNode name="revoke">
-            <properties>
-              <help>If parent CA is present, this CA certificate will be included in generated CRLs</help>
-              <valueless/>
-            </properties>
-          </leafNode>
+          #include <include/pki/cli-revoke.xml.i>
         </children>
       </tagNode>
       <tagNode name="certificate">
         <properties>
           <help>Certificate</help>
           <constraint>
             #include <include/constraint/alpha-numeric-hyphen-underscore-dot.xml.i>
           </constraint>
         </properties>
         <children>
-          <leafNode name="certificate">
-            <properties>
-              <help>Certificate in PEM format</help>
-              <constraint>
-                <validator name="base64"/>
-              </constraint>
-              <constraintErrorMessage>Certificate is not base64-encoded</constraintErrorMessage>
-            </properties>
-          </leafNode>
+          #include <include/pki/cli-certificate-base64.xml.i>
           <node name="acme">
             <properties>
               <help>Automatic Certificate Management Environment (ACME) request</help>
             </properties>
             <children>
               #include <include/url-http-https.xml.i>
               <leafNode name="url">
                 <defaultValue>https://acme-v02.api.letsencrypt.org/directory</defaultValue>
               </leafNode>
               <leafNode name="domain-name">
                 <properties>
                   <help>Domain Name</help>
                   <constraint>
                     <validator name="fqdn"/>
                   </constraint>
                   <constraintErrorMessage>Invalid domain name (RFC 1123 section 2).\nMay only contain letters, numbers and .-_</constraintErrorMessage>
                   <multi/>
                 </properties>
               </leafNode>
               <leafNode name="email">
                 <properties>
                   <help>Email address to associate with certificate</help>
                   <constraint>
                     #include <include/constraint/email.xml.i>
                   </constraint>
                 </properties>
               </leafNode>
               #include <include/listen-address-ipv4-single.xml.i>
               <leafNode name="rsa-key-size">
                 <properties>
                   <help>Size of the RSA key</help>
                   <completionHelp>
                     <list>2048 3072 4096</list>
                   </completionHelp>
                   <valueHelp>
                     <format>2048</format>
                     <description>RSA key length 2048 bit</description>
                   </valueHelp>
                   <valueHelp>
                     <format>3072</format>
                     <description>RSA key length 3072 bit</description>
                   </valueHelp>
                   <valueHelp>
                     <format>4096</format>
                     <description>RSA key length 4096 bit</description>
                   </valueHelp>
                   <constraint>
                     <regex>(2048|3072|4096)</regex>
                   </constraint>
                 </properties>
                 <defaultValue>2048</defaultValue>
               </leafNode>
             </children>
           </node>
           #include <include/generic-description.xml.i>
           <node name="private">
             <properties>
               <help>Certificate private key</help>
             </properties>
             <children>
-              <leafNode name="key">
-                <properties>
-                  <help>Certificate private key in PEM format</help>
-                  <constraint>
-                    <validator name="base64"/>
-                  </constraint>
-                  <constraintErrorMessage>Certificate private key is not base64-encoded</constraintErrorMessage>
-                </properties>
-              </leafNode>
-              <leafNode name="password-protected">
-                <properties>
-                  <help>Certificate private key is password protected</help>
-                  <valueless/>
-                </properties>
-              </leafNode>
+              #include <include/pki/cli-private-key-base64.xml.i>
+              #include <include/pki/password-protected.xml.i>
             </children>
           </node>
-          <leafNode name="revoke">
-            <properties>
-              <help>If CA is present, this certificate will be included in generated CRLs</help>
-              <valueless/>
-            </properties>
-          </leafNode>
+          #include <include/pki/cli-revoke.xml.i>
         </children>
       </tagNode>
       <tagNode name="dh">
         <properties>
           <help>Diffie-Hellman parameters</help>
           <constraint>
             #include <include/constraint/alpha-numeric-hyphen-underscore-dot.xml.i>
           </constraint>
         </properties>
         <children>
           <leafNode name="parameters">
             <properties>
               <help>DH parameters in PEM format</help>
               <constraint>
                 <validator name="base64"/>
               </constraint>
               <constraintErrorMessage>DH parameters are not base64-encoded</constraintErrorMessage>
             </properties>
           </leafNode>
         </children>
       </tagNode>
       <tagNode name="key-pair">
         <properties>
           <help>Public and private keys</help>
         </properties>
         <children>
           <node name="public">
             <properties>
               <help>Public key</help>
             </properties>
             <children>
-              <leafNode name="key">
-                <properties>
-                  <help>Public key in PEM format</help>
-                  <constraint>
-                    <validator name="base64"/>
-                  </constraint>
-                  <constraintErrorMessage>Public key is not base64-encoded</constraintErrorMessage>
-                </properties>
-              </leafNode>
+              #include <include/pki/cli-public-key-base64.xml.i>
             </children>
           </node>
           <node name="private">
             <properties>
               <help>Private key</help>
             </properties>
             <children>
-              <leafNode name="key">
-                <properties>
-                  <help>Private key in PEM format</help>
-                  <constraint>
-                    <validator name="base64"/>
-                  </constraint>
-                  <constraintErrorMessage>Private key is not base64-encoded</constraintErrorMessage>
-                </properties>
-              </leafNode>
-              <leafNode name="password-protected">
-                <properties>
-                  <help>Private key is password protected</help>
-                  <valueless/>
-                </properties>
-              </leafNode>
+              #include <include/pki/cli-private-key-base64.xml.i>
+              #include <include/pki/password-protected.xml.i>
+            </children>
+          </node>
+        </children>
+      </tagNode>
+      <tagNode name="openssh">
+        <properties>
+          <help>OpenSSH public and private keys</help>
+        </properties>
+        <children>
+          <node name="public">
+            <properties>
+              <help>Public key</help>
+            </properties>
+            <children>
+              #include <include/pki/cli-public-key-base64.xml.i>
+            </children>
+          </node>
+          <node name="private">
+            <properties>
+              <help>Private key</help>
+            </properties>
+            <children>
+              #include <include/pki/cli-private-key-base64.xml.i>
+              #include <include/pki/password-protected.xml.i>
             </children>
           </node>
         </children>
       </tagNode>
       <node name="openvpn">
         <properties>
           <help>OpenVPN keys</help>
         </properties>
         <children>
           <tagNode name="shared-secret">
             <properties>
               <help>OpenVPN shared secret key</help>
             </properties>
             <children>
               <leafNode name="key">
                 <properties>
                   <help>OpenVPN shared secret key data</help>
                 </properties>
               </leafNode>
               <leafNode name="version">
                 <properties>
                   <help>OpenVPN shared secret key version</help>
                 </properties>
               </leafNode>
             </children>
           </tagNode>
         </children>
       </node>
       <node name="x509">
         <properties>
           <help>X509 Settings</help>
         </properties>
         <children>
           <node name="default">
             <properties>
               <help>X509 Default Values</help>
             </properties>
             <children>
               <leafNode name="country">
                 <properties>
                   <help>Default country</help>
                 </properties>
                 <defaultValue>GB</defaultValue>
               </leafNode>
               <leafNode name="state">
                 <properties>
                   <help>Default state</help>
                 </properties>
                 <defaultValue>Some-State</defaultValue>
               </leafNode>
               <leafNode name="locality">
                 <properties>
                   <help>Default locality</help>
                 </properties>
                 <defaultValue>Some-City</defaultValue>
               </leafNode>
               <leafNode name="organization">
                 <properties>
                   <help>Default organization</help>
                 </properties>
                 <defaultValue>VyOS</defaultValue>
               </leafNode>
             </children>
           </node>
         </children>
       </node>
     </children>
   </node>
 </interfaceDefinition>