JAVA中的非交互式密码SSH

时间:2011-11-17 21:11:48

标签: java shell ssh passwords non-interactive

我有一个需要级联SSH的程序,即ssh服务器然后使用相同的连接ssh B服务器。服务器A充当桥梁。我有一个shell实例,用于ssh第一个服务器。

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

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

有没有办法可以提供密码作为参数或输入密码?

谢谢!

3 个答案:

答案 0 :(得分:3)

您应该在客户端上生成RSA密钥

ssh-keygen

并将公钥放入服务器上authorized_key文件夹中的授权密钥,以便能够在没有密码的情况下连接到服务器。

分步指南here

修改: 如果您无法访问服务器,请使用this question中所述的ssh-library for Java。

答案 1 :(得分: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

答案 2 :(得分:0)

因为你不能使用expect或ssh-keygen

以下gem可用于编写密码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 "$@" 4<&0 0<&3

将上述内容保存为asksshpass.sh chmod +x

echo "yourpassword" | ./sshaskpass.sh ssh user@server.example.com date