The comment indicates that the passphrase is optional, but it is a required parameter.  It should default to `""`

    def initialize(username, publickey, privatekey, passphrase="")

However, this seems like too many ordered parameters to me.  It is too easy to mix up the arguments ("did the publickey go first, or the privatekey?").  I would prefer hash style arguments, so the class can be initialized like so:

    SshKey.new(
      username: "git", 
      public_key: File.expand_path("~/.ssh/id_rsa.pub"), 
      private_key: File.expand_path("~/.ssh/id_rsa"), 
      passphrase: "passphrase"
    )

The passphrase being optional, of course.  The same would apply to `Credentials::Plaintext`, for consistency sake.