以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上執行...