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裡邊就好了.....改程式碼改的都木了...這種問題都沒發現