Java实现Unix远程连接Unix的 传文件 问题

zings 2010-01-08 11:44:18
一般情况下,Unix 的 root权限的ssh被禁用了,这样就使得我是用Java的ssh2包进行Unix之间的远程连接的时候就有一定问题。因为大家都知道,Unix用ssh远程连接的时候,默认都是直接输入密码的,如果是普通用户远程登录,则要输入相应的用户名ssh -l user x.x.x.x这样再输入密码才能登陆。
而貌似ssh2包采用ssh连接的时候,也只是对password进行了验证,而没有对user进行验证(我猜的,因为才是会说密码认证失败!!!),我现在就不知道如何进行连接了。。而ssh2包的connect的方法就那么几个,我想重载connect,但是发现相关函数太多了,而且很多不是直接让我加参数进行解决问题那么简单,很麻烦。。看的头都大了,我想请问大家一下,有什么好的办法没有,我要远程连接之后,使用其中的scpclient进行传文件,这个方法很不错。。。

如果用telnet进行连接,则进行scp传文件的时候,会有初次连接输入yes的问题,而且,进行执行文件的时候,不行批量执行,循环执行,也有一点问题。。。两种方法都有缺陷。。。

请问知道的,做过相关的,研究着的,将研究的大大们指点一下,谢谢。。。
可以加我QQ探讨。。。42292335。。。
顶起有分哦。。。虽然不多了 呵呵。。。
...全文
529 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
tq04q5k 2010-04-15
  • 打赏
  • 举报
回复
UNIX下原理相同。我在suse 10 下测试通过了
tq04q5k 2010-04-15
  • 打赏
  • 举报
回复
终于搞定了,我的情况是这样的,只要修改/etc/sshd/sshd_config这个文件,把里面的PasswordAuthentication改为yes或者直接注释掉。
tq04q5k 2010-04-15
  • 打赏
  • 举报
回复
我也是同样的问题啊
zings 2010-01-13
  • 打赏
  • 举报
回复
关于这个问题在继续讨论中,有知道的请给我留言,或加我QQ 谢谢!!
zings 2010-01-12
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 bayougeng 的回复:]
Java codepublicstaticvoid main(String[] args) {
Connection conn=new Connection("192.168.3.119");
BufferedReader br=null;try {
ConnectionInfo ci= conn.connect();if (!conn.authenticateWithPassword("young","young")) {thrownew RuntimeException();
}
Session sess= conn.openSession();
br=new BufferedReader(new InputStreamReader(sess.getStdout(),"utf-8"));
sess.execCommand("ls");
String line="";
String err="";while ((line= br.readLine())!=null) {
System.out.println(line);
System.err.println(err);
}
br.close();
}catch (IOException e) {// TODO Auto-generated catch block e.printStackTrace(System.err);
}finally {
conn.close();
}
}
[/Quote]

楚香大哥,非常谢谢你的代码,我试过你的代码,连接没有禁用root的linux机子可以得到结果,但是,连接禁用了root的ssh服务的机子还是不能通过!!!错误如下:

java.io.IOException: Password authentication failed.
at ch.ethz.ssh2.auth.AuthenticationManager.authenticatePassword(AuthenticationManager.java:300)
at ch.ethz.ssh2.Connection.authenticateWithPassword(Connection.java:309)
at test.demo.TestSSH.main(TestSSH.java:19)
Caused by: java.io.IOException: Authentication method password not supported by the server at this stage.
at ch.ethz.ssh2.auth.AuthenticationManager.authenticatePassword(AuthenticationManager.java:270)
... 2 more


现在有个问题的就是,如何通过ssh用普通用户(未禁用ssh),连接禁用root的ssh服务的linux或Unix......不知道意思你明白没有。。。
zings 2010-01-11
  • 打赏
  • 举报
回复
关于ssh的那个问题 , 再等一会!!!
bayougeng 2010-01-11
  • 打赏
  • 举报
回复
	public static void main(String[] args) {
Connection conn = new Connection("192.168.3.119");
BufferedReader br = null;
try {
ConnectionInfo ci = conn.connect();
if (!conn.authenticateWithPassword("young", "young")) {
throw new RuntimeException();
}
Session sess = conn.openSession();
br = new BufferedReader(new InputStreamReader(sess.getStdout(), "utf-8"));
sess.execCommand("ls");
String line = "";
String err = "";
while ((line = br.readLine()) != null) {
System.out.println(line);
System.err.println(err);
}
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace(System.err);
} finally {
conn.close();
}
}

运行结果:
groundworkpro-5.3.0-br46-gw334-linux-32-installer.bin
gw-donschina-patch-1.0.bin
install_RakRak.xls
linux-3.chm
linuxexpress.chm
linuxshell.chm
music
private.txt
test
workspace
yh.ttc
下载
国际金融.doc
桌面
管理心理学.doc
音乐
zings 2010-01-11
  • 打赏
  • 举报
回复
Java使用ssh2包时,
root的ssh服务被禁用了的话,直接用普通用户连接的时候有密码验证失败问题

这个问题不好解决啊,ssh连接都是默认输入密码的。。。ssh2包的方法好像都是默认的那样。。。难道只有重载那个connect的方法吗?如何重载?大家给点意见啊。。。waiting 。。。
kokobox 2010-01-08
  • 打赏
  • 举报
回复
没看明白。。。。
zings 2010-01-08
  • 打赏
  • 举报
回复
呵呵 其实我也说不清楚,在实际中就是直接输入不能通过。。。。

那个ssh的有谁知道不?就是用Java进行ssh的时候,如果root的ssh服务被禁用了的话,直接用普通用户连接的时候有密码验证失败问题。。。不知道怎么解决。。。
bayougeng 2010-01-08
  • 打赏
  • 举报
回复
我被你说糊涂了,问题在哪呢?
从InputStream中读入,判断是:Are you sure you want to continue connecting(yes/no)?
则往OutputStream中写入:y\n
然后再读,判断是:IP's password:
则再写:*****
有什么问题么?或者你可以直接将他们做成一个数组,一个一个写到输出流里。
只要注意每次写完以后flush就行了。
zings 2010-01-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bayougeng 的回复:]
输入输出流。
得到输入流,然后先输入个yes进去。就没提示了。
[/Quote]

我其他的操作都是用输入输出的流完成的,他连接的时候,会出来一连串的的输入提示。
# scp ....
The XXX... established.
DSA Key...
Are you sure you want to continue connecting(yes/no)? yes
warning:...
IP's password:pass

红色是我输入的
我要读取那个一连串的
The XXX... established.
DSA Key...
Are you sure you want to continue connecting(yes/no)?
然后再读入yes才能通过啊!!!
后面我反正是读取
IP's password:
然后输入pass才通过的。。。这样貌似复杂化了??看你应该做过相关的东西,这个是怎么处理的??


zings 2010-01-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xq_zhang 的回复:]
先用普通用户连到目标unix  再su到root用户  就可以用scp传了
[/Quote]

不知道你用过ssh2没有,我说了,外面的命令用普通用户连接Unix要加入参数,而ssh2包中(貌似)没有加入这个参数的形式。。。如果不输入参数,他好像默认是只输入密码进行登录的(我测试好像是这样)。。关键是Unix默认root禁用了ssh。。。而我又不能用root登录...
那个ssh2包中有个scpclient的put方法直接传文件 这个很方便。。。能帮忙继续看看吗?如何解决这个问题?

bayougeng 2010-01-08
  • 打赏
  • 举报
回复
输入输出流。
得到输入流,然后先输入个yes进去。就没提示了。
xq_zhang 2010-01-08
  • 打赏
  • 举报
回复
先用普通用户连到目标unix 再su到root用户 就可以用scp传了
zings 2010-01-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 kokobox 的回复:]
没看明白。。。。
[/Quote]

呵呵 我错了,简单说:
1。 能用Java的ssh2包ssh(远程连接)一台Unix机子(禁用了root的ssh服务,普通用户没有禁用),然后传文件实现到Unix机子上,如何实现?。(ssh2包)

2. 用Java的telnet包远程连接Unix机子时,如何解决scp传文件初次连接要输入Yes的问题(java net2.0包)。

请各位大大指点!!

50,531

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧