您好,登錄后才能下訂單哦!
之前搞了套遠程訪問ssh進行操作的代碼,最近有需求,需要通過一臺跳轉機才能訪問目標服務。在網上搜了半天,也沒找到比較好的例子,就自己翻閱了下JSCH的API。但是看的云里霧里的。聯想了下,端口轉發的原理是否是把目標節點ip:port映射到localhost:port,然后通過localhost:port發送消息就可以抵達目標節點呢?
帶著這個推論,改造了下之前的代碼。
原有代碼通過jsch連接目標節點服務器這里就不多說了,自行百度,網上很多。
下面貼下改造之后的代碼:
/** * 獲取連接 * @param ip 跳轉機host * @param userName 跳轉機用戶名 * @param pwd 跳轉機密碼 * @param port 跳轉機端口 * @return ChannelSftp 返回值 * @throws JSchException 連接異常 */ public static ChannelSftp connect(String ip, String userName, String pwd, int port) throws JSchException { if (port <= 0) { port = PORT; } Session sshSession = null; JSch jsch = new JSch(); sshSession = jsch.getSession(userName, ip, port); sshSession.setPassword(pwd); Properties sshConfig = new Properties(); sshConfig.put("StrictHostKeyChecking", "no"); sshConfig.put("PreferredAuthentications", "password,keyboard-interactive"); sshSession.setConfig(sshConfig); sshSession.connect(TMOUT);//可設置超時時間 //此處開始為端口映射到本地的部分 sshSession.setPortForwardingL(本地端口, 目標節點地址, 22); //完成上訴映射之后,即可通過本地端口連接了 Session session = jsch.getSession("目標服務用戶名", "127.0.0.1",本地端口); Properties remoteCfg = new Properties(); remoteCfg.put("StrictHostKeyChecking", "no"); remoteCfg.put("PreferredAuthentications", "password,keyboard-interactive"); session.setConfig(remoteCfg); session.setPassword("目標服務密碼"); session.connect(); //后續如何可自行改變,網上運用很多 Channel channel = (Channel) session.openChannel("sftp");//創建sftp通信通道 channel.connect(); ChannelSftp sftp = (ChannelSftp) channel; return sftp; }
最后測試通過sftp訪問目標節點的目錄,成功。
以上這篇使用JSCH框架通過跳轉機訪問其他節點的方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。