简体   繁体   中英

Connect to server without username or password using JSch

I'm using com.jcraft.jsch.JSch to create an SFTP connection.

My SSH keys are setup to where I'm able to SSH directly to the server without username or password.

ssh test_server

My public key is in an authorized_key file in me@test_server:~/.ssh/
My SSH keys on my local machine are in C:\\cygwin\\home\\me\\.ssh\\
In addition, I also have a config file and a known_hosts file within this directory.

Host test_server
User user_name
HostName test_server.domain.com
ForwardAgent yes

To double-check, I made sure that my public key within C:\\cygwin\\home\\me\\.ssh is in the remote server's authorized_keys file.

I'm developing a GUI program that creates a file. With that file, I want to be able to store it on the remote server and place it within a folder there with SFTP. How am I able to do this?

Here's what I have so far:

public static void main(String[] arg) {
    try {
        JSch jsch = new JSch();

        String user = "";
        String host = "test_server";
        int port = 22;
        String privateKey = "C:/cygwin/home/me/.ssh/id_rsa";

        jsch.addIdentity(privateKey);
        System.out.println("identity added ");

        Session session = jsch.getSession("", host);
        System.out.println("session created.");

        session.connect();
        System.out.println("session connected.....");

        Channel channel = session.openChannel("sftp");
        channel.setInputStream(System.in);
        channel.setOutputStream(System.out);
        channel.connect();
        System.out.println("shell channel connected....");

        ChannelSftp c = (ChannelSftp) channel;

        String fileName = "test.txt";
        c.put(fileName, "./in/");
        c.exit();
        System.out.println("done");

    } catch (Exception e) {
        System.err.println(e);
    }
}

I keep receiving a

com.jcraft.jsch.JSchException: Auth fail error.

Does anyone know a solution to this?

Additional Information (This might be useful... Unsure):
When I open cmd, it takes me to C:\\Users\\me .
But when I pass the "pwd" command, it prints out /cygdrive/c/Users/me .
I'm also open to any new libraries or perhaps just a better way to do this at all.

Thank you so much!

Output for ssh -v test_server :

OpenSSH_7.4p1, OpenSSL 1.0.2k  26 Jan 2017
debug1: Reading configuration data /home/me/.ssh/config
debug1: /home/me/.ssh/config line 1: Applying options for *
debug1: /home/me/.ssh/config line 9: Applying options for wmpos1
debug1: Control socket "/home/me/.ssh/master-user_name@test_server:22" d
oes not exist
debug1: Connecting to test_server [127.0.0.1] port 22.
debug1: Connection established.
debug1: identity file /home/me/.ssh/id_rsa type 1
debug1: key_load_public: No such file or directory
debug1: identity file /home/me/.ssh/id_rsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/me/.ssh/id_dsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/me/.ssh/id_dsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/me/.ssh/id_ecdsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/me/.ssh/id_ecdsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/me/.ssh/id_ed25519 type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/me/.ssh/id_ed25519-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_7.4
debug1: Remote protocol version 2.0, remote software version OpenSSH_6.2
debug1: match: OpenSSH_6.2 pat OpenSSH* compat 0x04000000
debug1: Authenticating to test_server:22 as 'user_name'
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: algorithm: ecdh-sha2-nistp256
debug1: kex: host key algorithm: ecdsa-sha2-nistp256
debug1: kex: server->client cipher: aes128-ctr MAC: umac-64-etm@openssh.com comp
ression: none
debug1: kex: client->server cipher: aes128-ctr MAC: umac-64-etm@openssh.com comp
ression: none
debug1: sending SSH2_MSG_KEX_ECDH_INIT
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ecdsa-sha2-nistp256 SHA256:aV1o2Laclf7vRU2QOH+iWpuYYmy2
bokk8uQrVEaPL8k
debug1: Host 'test_server' is known and matches the ECDSA host key.
debug1: Found key in /home/me/.ssh/known_hosts:2
debug1: rekey after 4294967296 blocks
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: rekey after 4294967296 blocks
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,keyboard-interactive
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/me/.ssh/id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 151
debug1: Authentication succeeded (publickey).
Authenticated to test_server ([127.0.0.1]:22).
debug1: channel 0: new [client-session]
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: pledge: network

The fact that you do not specify the username explicitly on ssh command-line does not mean, that no username is used.

The ssh by default uses a local username implicitly. JSch won't do that. You have to explicitly specify the username, even if it is the same as the local username.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM