2011-11-17 46 views
1

我有一个需要级联SSH的程序,即ssh服务器,然后使用相同的连接ssh B服务器。服务器A是一个桥梁。我有一个用于ssh第一个服务器的shell实例。非交互式密码在JAVA中的SSH

当我在做ssh user @ ipAddress时,它要求输入密码。我试过用户@ ipAddress \ n密码。它似乎没有工作。

我不能使用任何外部工具,如ssh-agent或expect。我无法控制服务器A.

有没有办法将密码作为参数或输入密码?

谢谢!

回答

3

您应该生成客户端

ssh-keygen 

上的RSA密钥,把公钥授权密钥在authorized_key文件夹中的服务器上能够连接到服务器,无需输入密码。

给出了一步一步的指导here

编辑: 如果服务器无法访问,请使用SSH-库Java作为在this question decrived。

+0

我没有对服务器A没有控制,我不能安装任何证书。我唯一能做的就是使用ssh。 – Mo3z

+0

我更新了我的答案检查代码片段在这个线程中,你会发现你的答案 – lc2817

+0

谢谢lc2817。我的问题不是连接到服务器A.我能够SSH服务器A.您的答案为我提供了解决方案。我需要从服务器A到服务器B的SSH使用相同的连接。谢谢! – Mo3z

1

要么你可以设置的password-less login或者你可以只给像描述here密码:

ssh -t -t <machine> <<EO_MY_INPUT 
<password> 
date # (or whichever is the command to get date/time) 
exit 
EO_MY_INPUT 
+0

ssh不接受stdin上的密码。 –

+0

@glennjackman与适当的参数它会。发布更新。 – Kashyap

0

既然你不能使用期望或ssh-凯基

下面的宝石可以用来脚本密码SSH会话

http://www.debian-administration.org/articles/587

#!/bin/bash 
# Copyright (C) 2008 John S. Skogtvedt <jss at bzz.no> 
# Licence: GNU GPL v3 or later at your option 

if [ -n "$SSH_ASKPASS_FD" ] 
then 
     read password <&$SSH_ASKPASS_FD 
     echo "$password" 
     exit 0 
elif [ $# -lt 1 ] 
then 
     echo "Usage: echo password | $0 <ssh command line>" >&2 
     exit 1 
fi 

export SSH_ASKPASS=$0 
export SSH_ASKPASS_FD=4 
[ "$DISPLAY" ] || export DISPLAY=dummy:0 
read password 

exec 3<&0 
# write password 100 times to make repeated ssh connections work 
for x in $(seq 100) 
do 
    echo "$password" 
done | exec setsid "[email protected]" 4<&0 0<&3 

保存上面asksshpass.sh可以chmod +x

echo "yourpassword" | ./sshaskpass.sh ssh [email protected] date