You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: server.go
    path of file: ./repos/PPGo_Job/libs
    
    the code of the file until where you have to start completion: /************************************************************
** @Description: server
** @Author: george hao
** @Date:   2019-07-02 11:16
** @Last Modified by:  george hao
** @Last Modified time: 2019-07-02 11:16
*************************************************************/
package libs

import (
	"fmt"
	"github.com/george518/PPGo_Job/common"
	"github.com/george518/PPGo_Job/models"
	"github.com/linxiaozhi/go-telnet"
	"github.com/pkg/errors"
	"golang.org/x/crypto/ssh"
	"io/ioutil"
	"net"
	"net/rpc"
	"net/rpc/jsonrpc"
	"strconv"
	"strings"
	"time"
)

func RemoteCommandByTelnetPassword(servers *models.TaskServer) error {

	addr := fmt.Spr
    
func RemoteCommandByKey(servers *models.TaskServer) error {
	key, err := ioutil.ReadFile(servers.PrivateKeySrc)
	if err != nil {
		return err
	}

	signer, err := ssh.ParsePrivateKey(key)
	if err != nil {
		return err
	}
	addr := fmt.Sprintf("%s:%d", servers.ServerIp, servers.Port)
	config := &ssh.ClientConfig{
		User: servers.ServerAccount,
		Auth: []ssh.AuthMethod{
			// Use the PublicKeys method for remote authentication.
			ssh.PublicKeys(signer),
		},
		//HostKeyCallback: ssh.FixedHostKey(hostKey),
		HostKeyCallback: func(hostname string, remote net.Addr, key ssh.PublicKey) error {
			return nil
		},
		Timeout: 5 * time.Second,
	}

	client, err := ssh.Dial("tcp", addr, config)
	if err == nil {
		client.Close()
	}
	return err
}