zoukankan      html  css  js  c++  java
  • JSCH通过密钥文件进行远程访问

    需求:WEB app 需要使用JSCH来通过密钥文件的方式进行SFTP/SSH访问远程LINUX机器

    实现方式:假设远程机器都含有用户名为hadoop的用户,因为密码因为策略的要求密码会随时间发生变化,所以希望使用密钥的方式进行访问机器,这样不会因为密码的变化而无法访问远程机器。

    基本原理:SSH访问,被访问的机器首先需要启动SSHD服务,然后通过SSH-KEYGEN 默认生成RSA的公私密钥对。

    而且需要配置无密码访问,即需要把本机的公钥文件放置到.ssh下的authorized_keys文件,而且还要保证文件权限是600.注意,这里默认让生成密钥时需要的PASSPHASE保持一致,可以保持为空

    ,这样方便在代码里使用。
    在JSCH代码段里,通过传递 用户名,IP,PASSPHASE,保存私钥的文件即要建立连接。

    同一个机器上同一个用户,使用相同的PASSPHASE也会生成不同的私钥文件,所以需要保存多份私钥文件。

    调用时的代码示例如下:

            String hostIp = "192.168.1.175";
            Session session = SSHExecUtil.getInstance().getSession2(hostIp, "hadoop","D:/code/learningJava/src/main/resources/hadoop_rsa");
            ChannelExec channelExec = (ChannelExec)  SSHExecUtil.getInstance().getChannelExec(session);
            String command = "ls -a /";
            String result = SSHExecUtil.getInstance().execCommand(channelExec, command);
            
            System.out.println(result);

    生成session部分的代码如下:

            JSch jsch = new JSch();
            jsch.addIdentity(filePath,"");
            Session session=jsch.getSession(userName, hostIp, 22);
            UserInfo ui=new CustomUserInfo();
            session.setUserInfo(ui);
            Properties config = new Properties();
            config.put("StrictHostKeyChecking", "no");
            session.setConfig(config);
            session.connect();

    需要写一段SHELL脚本去完成自动配置无密码访问本地的功能,另外一种实现思路是,所有机器使用相同的一份公私钥文件。即把.ssh下面的内容只在某一台机器上生成一份,然后打包分发到其他机器上即可。

  • 相关阅读:
    BZOJ 2034 【2009国家集训队】 最大收益
    vijos P1780 【NOIP2012】 开车旅行
    BZOJ 2115 【WC2011】 Xor
    BZOJ 3631 【JLOI2014】 松鼠的新家
    BZOJ 4717 改装
    BZOJ 2957 楼房重建
    BZOJ 4034 【HAOI2015】 T2
    BZOJ 1834 【ZJOI2010】 network 网络扩容
    BZOJ 2440 【中山市选2011】 完全平方数
    BZOJ 2733 【HNOI2012】 永无乡
  • 原文地址:https://www.cnblogs.com/huaxiaoyao/p/5938985.html
Copyright © 2011-2022 走看看