在JSch中不断收到Auth失败异常,但我能够在没有密码的情况下ssh到IP [重复]
Posted
技术标签:
【中文标题】在JSch中不断收到Auth失败异常,但我能够在没有密码的情况下ssh到IP [重复]【英文标题】:Keep getting Auth fail exception in JSch but I was able to ssh to IP without a password [duplicate] 【发布时间】:2021-05-26 18:40:42 【问题描述】:我正在尝试创建一个 JSch 隧道以通过 ssh 连接到一个 IP,这是一个运行脚本的无密码设置。当我手动对该 IP 执行 ssh 时,我不需要密码。 card.ipAddress
为 ssh 提供 IP 地址,这是一个无密码设置。我有log.info
(打印)语句,所以我可以知道我到底在哪里得到了异常。 remoteShellScript
有脚本的路径。
com.jcraft.jsch.Session jschSession = null;
try
log.info("Entering try block of JSch session");
JSch jsch = new JSch();
jschSession = jsch.getSession(USERNAME, card.ipAddress, REMOTE_PORT);
log.info("after getSession");
// not recommend, uses jsch.setKnownHosts
jschSession.setConfig("StrictHostKeyChecking", "no");
log.info("after setting Config");
// authenticate using password
//jschSession.setPassword(PASSWORD);
// connect timeout session
jschSession.connect(); //This is where I get the Exception
log.info("after connecting to jschSession");
ChannelExec channelExec = (ChannelExec) jschSession.openChannel("exec");
log.info("Channel is open");
// run a shell script
channelExec.setCommand("sh " + remoteShellScript + "\"" + cn_ip + "\" " + duration);
log.info("after running script");
// display errors to System.err
channelExec.setErrStream(System.err);
log.info("after setErr");
//InputStream in = channelExec.getInputStream();
// 5 seconds timeout channel
channelExec.connect();
log.info("after connect");
catch (Exception e)
log.error("Catching exception", e);
e.printStackTrace();
finally
log.info("Disconnecting session from Finally block");
if (jschSession != null)
jschSession.disconnect();
例外:
Catching exception: com.jcraft.jsch.JSchException: Auth fail
【问题讨论】:
无密码是否意味着您正在使用密钥进行身份验证,或者您真的意味着没有密码?前段时间有个问题,不需要密码,对比***.com/questions/62663771/… 【参考方案1】:Jsch
需要您的密钥才能进行身份验证。
之后:
JSch jsch = new JSch();
添加:
jsch.addIdentity( "path/to/your/key" );
【讨论】:
密钥在~/.ssh/id_rsa.pub
我应该输入为jsch.addIdentity("~/.ssh/id_rsa.pub")
还是jsch.addIdentity(".ssh/id_rsa.pub")
。当我打开 .pub 文件时,我看到 "ssh-rsa AGDGSOMERANDOMCHARACTERS root@some.host.name"
那么,我应该选择整个内容作为密钥吗?还是那些随机字符是私钥?
您需要将路径写入您的私钥。密钥必须已经在您运行代码的系统上的某个位置(因为您可以毫无问题地手动连接)。
是的,"~/.ssh/id_rsa.pub"
和 ".ssh/id_rsa.pub"
不被视为路径吗?我不知道是否在开头包含~/
。
sdasf: (1) 在shell中 ~ 是$HOME,但不是Java;如果您使用 $HOME 中的工作目录运行程序,通常情况下,您可以将目录保留在路径名 (2) 之外,如 Timon 所说,您需要提供 私钥文件 - 这就是"path/.ssh/id_rsa"
不是 "path/.ssh/id_rsa.pub"
.以上是关于在JSch中不断收到Auth失败异常,但我能够在没有密码的情况下ssh到IP [重复]的主要内容,如果未能解决你的问题,请参考以下文章
JSch SFTP 放入 IBM z/OS 失败:无法写入文件;嵌套异常为 3:权限被拒绝
我正在尝试使用 Jmeter 在 Intranet 上记录应用程序,但我不断收到 DNS 失败消息