diff --git a/protocols/netconf/api/src/main/java/org/onosproject/netconf/NetconfDeviceInfo.java b/protocols/netconf/api/src/main/java/org/onosproject/netconf/NetconfDeviceInfo.java
index 3ebb982..8d16873 100644
--- a/protocols/netconf/api/src/main/java/org/onosproject/netconf/NetconfDeviceInfo.java
+++ b/protocols/netconf/api/src/main/java/org/onosproject/netconf/NetconfDeviceInfo.java
@@ -23,16 +23,15 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.io.File;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.Objects;
 import java.util.Optional;
 import java.util.OptionalInt;
 
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
 /**
  * Represents a Netconf device information.
  */
@@ -46,9 +45,6 @@
     private IpAddress ipAddress;
     private int port;
     private char[] key;
-    //File keyFile @deprecated 1.9.0
-    @Deprecated
-    private File keyFile;
     private Optional<NetconfSshClientLib> sshClientLib;
     private OptionalInt connectTimeoutSec;
     private OptionalInt replyTimeoutSec;
@@ -88,10 +84,6 @@
      * @param port      the tcp port
      * @param keyString the string containing a DSA or RSA private key
      *                  of the user in OpenSSH key format
-     *                  <br>
-     *                  (Pre 1.9.0 behaviour: {@code keyString} can be file path
-     *                  to a file containing DSA or RSA private key of the user
-     *                  in OpenSSH key format)
      */
     public NetconfDeviceInfo(String name, String password, IpAddress ipAddress,
                              int port, String keyString) {
@@ -103,7 +95,6 @@
         this.ipAddress = ipAddress;
         this.port = port;
         this.key = keyString.toCharArray();
-        this.keyFile = new File(keyString);
         this.sshClientLib = Optional.empty();
         this.connectTimeoutSec = OptionalInt.empty();
         this.replyTimeoutSec = OptionalInt.empty();
@@ -126,7 +117,6 @@
         if (netconfConfig.sshKey() != null && !netconfConfig.sshKey().isEmpty()) {
             this.key = netconfConfig.sshKey().toCharArray();
         }
-        this.keyFile = new File(netconfConfig.sshKey());
         if (netconfConfig.sshClient().isPresent()) {
             this.sshClientLib = Optional.of(NetconfSshClientLib.getEnum(netconfConfig.sshClient().get()));
         } else {
@@ -221,19 +211,6 @@
     }
 
     /**
-     * Exposes the keyFile of the controller.
-     *
-     * @return File object pointing to a file containing a DSA or RSA
-     *         private key of the user in OpenSSH key format,
-     *         or null if device is not configured to use public key authentication
-     * @deprecated 1.9.0
-     */
-    @Deprecated
-    public File getKeyFile() {
-        return keyFile;
-    }
-
-    /**
      * Exposes the Client library implementation.
      *
      * @return Enumerated value
diff --git a/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/impl/NetconfSessionImpl.java b/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/impl/NetconfSessionImpl.java
index e54e6cd..51a8cfd 100644
--- a/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/impl/NetconfSessionImpl.java
+++ b/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/impl/NetconfSessionImpl.java
@@ -184,13 +184,7 @@
             }
             boolean isAuthenticated;
             try {
-                if (deviceInfo.getKeyFile() != null && deviceInfo.getKeyFile().canRead()) {
-                    log.debug("Authenticating with key file to device {} with username {}",
-                            deviceInfo.getDeviceId(), deviceInfo.name());
-                    isAuthenticated = netconfConnection.authenticateWithPublicKey(
-                            deviceInfo.name(), deviceInfo.getKeyFile(),
-                            deviceInfo.password().equals("") ? null : deviceInfo.password());
-                } else if (deviceInfo.getKey() != null) {
+                if (deviceInfo.getKey() != null) {
                     log.debug("Authenticating with key to device {} with username {}",
                             deviceInfo.getDeviceId(), deviceInfo.name());
                     isAuthenticated = netconfConnection.authenticateWithPublicKey(
