SFTP信任公鑰配置及JSCH庫

2021-08-27 19:00:51 字數 3132 閱讀 1304

以dsa舉例: 

ssh-keygen –t dsa

執行該命令後,在home/使用者名稱/.ssh目錄下,會生成id_dsa和id_dsa.pub兩個檔案

scp id_dsa.pub 使用者名稱@服務端ip:/home/使用者名稱/.ssh

此時還需要輸入密碼

登入服務端,進入到/home/使用者名稱/.ssh目錄,將剛剛拷貝的id_dsa.pub檔案的內容加入到authorized_keys檔案中

cat id_dsa.pub >> authorized_keys

chmod 600 authorized_keys

chmod 700 .ssh

在客戶端執行:

sftp –oport=埠 使用者名稱@服務端ip

如果不需要輸入密碼就可以連上,則說明配置成功

public class sftputil 

session = jsch.getsession(username, host, port);

if (log.isinfoenabled()) , sftpusername={}", host, username);

}//設定密碼

if (stringutils.isnotblank(connectconfig.getpassword()))

properties config = new properties();

config.put("stricthostkeychecking", "no");

session.setconfig(config);

//設定超時

session.settimeout(connectconfig.gettimeout());

//建立連線

session.connect();

if (log.isinfoenabled()) , sftpusername={}", host, username);

}//開啟sftp通道

channel = (channelsftp) session.openchannel(sftp);

//建立sftp通道的連線

channel.connect();

if (log.isinfoenabled()) , sftpusername={}", host, username);}}

/*** 是否已連線

* * @return

*/private boolean isconnected()

/*** 獲取本地執行緒儲存的sftp客戶端

* * @return

* @throws exception

*/public static sftputil getsftputil(connectconfig connectconfig) throws exception

return sftplocal.get();

}/**

* 釋放本地執行緒儲存的sftp客戶端

*/public static void release()

}/**

* 建構函式

* * 非執行緒安全,故許可權為私有

* *

* @throws exception

*/private sftputil(connectconfig connectconfig) throws exception

/*** 關閉通道

* * @throws exception

*/public void closechannel() catch (exception e)

}if (null != session) catch (exception e) }}

/***

* @param src 原始檔

* @param dst 儲存後的檔名稱或目錄

* @throws exception

*/public void downfile(string downdir, string src, string dst) throws exception

/*** 刪除檔案

* * @param filepath 檔案全路徑

* @throws sftpexception

*/public void deletefile(string filepath) throws sftpexception

@suppresswarnings("unchecked")

public listlistfiles(string dir) throws sftpexception

filenames.add(filename);

}return filenames;

}return null;

}}

說明:

2.1 connectconfig包含了建立sftp連線所需要的全部引數資訊

2.2 如果按照第一步進行了sftp的信任公鑰配置,則需要通過呼叫jsch的addidentity方法將金鑰對中的私鑰id_dsa設定進去

//新增私鑰(信任登入方式)

if (stringutils.isnotblank(connectconfig.getprivatekey()))

2.3 為了避免頻繁的進行連線建立和連線釋放操作,一般會定義為單例模式,但存在某些業務場景,需要在同乙個執行緒執行完連續幾次完整的業務操作後,將連線釋放掉。如果採用單例,那麼多執行緒併發的場景下會出現共享資源競爭導致的併發問題,譬如在

b執行緒執行業務的過程中,

a執行緒將連線釋放。因此,可以借助

threadlocal

來避免該問題。

/**

* 獲取本地執行緒儲存的sftp客戶端

* * @return

* @throws exception

*/public static sftputil getsftputil(connectconfig connectconfig) throws exception

return sftplocal.get();

}/**

* 釋放本地執行緒儲存的sftp客戶端

*/public static void release()

}

linux信任公鑰的配置

一 每個使用者都有自己的家目錄 訪問方式是 ssh id rsa.pub 使用 就是表示家目錄。具體家目錄在 在使用者密碼配置檔案中 etc passwd中。第6列的值就是。可以使用 訪問家目錄。也可以直接輸入絕對路徑來訪問 home git 每個使用者都有乙個自己信任列表檔案,配置在 ssh au...

SCP和SFTP不用輸入密碼的信任公鑰方法攻略

總結一下可以避免sftp輸入密碼的三種方式 第一種 最常用 大多對密級要求較高的企業單位都使用sftp方式傳輸,但是sftp傳輸必須輸入密碼,對於通過指令碼定時傳輸檔案非常不方便。信任公鑰 對稱公鑰 方法解決了每次都輸入密碼的問題 使用客戶端生成金鑰鑰對,將公鑰新增到伺服器的信任公鑰表中,即完成了伺...

sftp免密登入(生成公鑰)

伺服器版本 centos7 192.168.189.111 伺服器使用者名稱 admin 192.168.189.112 伺服器使用者名稱 admin 描述 在192.168.189.111伺服器上使用sftp命令免密連線到192.168.189.112上 1.在192.168.189.111上執行...