大家好,我是烤鸭:
今天分享的是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 username@ip地址
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 closedat com.jcraft.jsch.ChannelSftp.put(ChannelSftp.java:551)at com.jcraft.jsch.ChannelSftp.put(ChannelSftp.java:492)
Caused by: java.io.IOException: Pipe closedat 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里边就好了.....改代码改的都木了...这种问题都没发现