JSch 是一个纯 Java 实现的 SSH2 协议库,它允许你连接到 SSH 服务器并执行命令、上传/下载文件等。使用公钥进行身份验证是一种安全且方便的方式,因为它不需要每次都输入密码。
公钥认证:SSH 使用一对密钥(公钥和私钥)来进行身份验证。公钥存储在远程服务器上,而私钥保留在本地计算机上。当客户端尝试连接到服务器时,服务器会使用公钥来加密一个随机字符串,然后发送给客户端。客户端使用私钥解密这个字符串,并将其发送回服务器。如果解密成功,服务器就知道客户端拥有对应的私钥,从而验证了客户端的身份。
以下是一个使用 JSch 进行公钥认证并连接到 Linux 服务器的简单示例:
import com.jcraft.jsch.*;
public class JSchExample {
public static void main(String[] args) {
String host = "your_server_ip";
String user = "your_username";
String privateKey = "/path/to/your/private/key";
try {
JSch jsch = new JSch();
jsch.addIdentity(privateKey);
Session session = jsch.getSession(user, host, 22);
session.setConfig("StrictHostKeyChecking", "no"); // 注意:在生产环境中应谨慎使用
session.connect();
System.out.println("Connected to " + host);
// 执行命令
ChannelExec channel = (ChannelExec) session.openChannel("exec");
channel.setCommand("ls -l");
channel.setInputStream(null);
channel.setErrStream(System.err);
InputStream in = channel.getInputStream();
channel.connect();
byte[] tmp = new byte[1024];
while (true) {
while (in.available() > 0) {
int i = in.read(tmp, 0, 1024);
if (i < 0) break;
System.out.print(new String(tmp, 0, i));
}
if (channel.isClosed()) {
System.out.println("exit-status: " + channel.getExitStatus());
break;
}
try { Thread.sleep(1000); } catch (Exception ee) {}
}
channel.disconnect();
session.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
}
600
(即只有所有者可读写)。600
(即只有所有者可读写)。known_hosts
文件中。known_hosts
文件,或在代码中禁用严格的主机密钥检查(不推荐在生产环境中使用)。known_hosts
文件,或在代码中禁用严格的主机密钥检查(不推荐在生产环境中使用)。通过以上步骤,你应该能够成功使用 JSch 和公钥认证连接到 Linux 服务器。
领取专属 10元无门槛券
手把手带您无忧上云