2011-11-17 48 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