1. 程式人生 > >ssh sftp 免密碼 公鑰登入

ssh sftp 免密碼 公鑰登入

大家好,我是烤鴨:

    今天分享的是java ssh sftp 免密碼登入。

 

1.  JAVA程式碼 ssh連線

http://www.360doc.com/content/14/0409/16/9552892_367544139.shtml

https://blog.csdn.net/u013066244/article/details/70198839

公鑰和私鑰不需要用程式碼生成,linux有外掛的。

 

2.    linux ssh-keygen 生成公鑰和私鑰

https://blog.csdn.net/xinshui151/article/details/79187563

SSH-keygen引數說明:

https://www.cnblogs.com/sunjf/p/ubutu_ssh.html

 

3.   linux 免密連線

sftp -oIdentityFile=/root/.ssh/id_dsa -oPort=8002 [email protected]地址


oPort :  埠

oIdentityFile: 私鑰檔案(絕對路徑)

username: 使用者名稱

ip地址:ip

 

4.   實際中遇到的問題

按照上面的連線之後,還讓我輸入密碼。

嗯。我生成的dsa祕鑰是帶密碼的。。。。然而我忘了。太他麼2了。

ssh-keygen -t dsa

沒辦法,重新生成一個吧。紅線的部分一定不要填,直接回車!!!

另外說一句,用rsa和dsa生成都可以的,並沒有什麼區別。

ssh-keygen -t rsa

 

5.  關於兩個常見異常:

com.jcraft.jsch.JSchException: invalid privatekey

很明顯,就是私鑰取錯了,我一開始獲取的是公鑰就報的這個錯,換成私鑰 就好了,不帶.pub字尾的檔案。

com.jcraft.jsch.JSchException: Auth fail

https://blog.csdn.net/u010648555/article/details/81878189  


這個講的比較詳細,我的就是密碼錯誤。因為之前生成的祕鑰密碼忘記了。。。。

 

com.jcraft.jsch.SftpException: Permission denied

一定要看好異常在哪發生的。

我的是這一行發生的。然後在linux上執行ls命令。

是linux 伺服器端的許可權不足。沒有讀的許可權。把資料夾許可權改成可讀的就可以了。

com.jcraft.jsch.SftpException: java.io.IOException: Pipe closed
    at com.jcraft.jsch.ChannelSftp.put(ChannelSftp.java:551)
    at com.jcraft.jsch.ChannelSftp.put(ChannelSftp.java:492)
Caused by: java.io.IOException: Pipe closed
    at java.io.PipedInputStream.read(PipedInputStream.java:307)
    at com.jcraft.jsch.Channel$MyPipedInputStream.updateReadSide(Channel.java:362)
    at com.jcraft.jsch.ChannelSftp.put(ChannelSftp.java:515)

這個異常是在執行put操作出現的,看了半天,才發現put操作在 sftp.disconnect() 後執行的,程式碼如下:

放到try裡邊就好了.....改程式碼改的都木了...這種問題都沒發現