我有一个需要级联SSH的程序,即ssh服务器然后使用相同的连接ssh B服务器。服务器A充当桥梁。我有一个shell实例,用于ssh第一个服务器。
当我在做ssh user @ ipAddress时,它要求输入密码。我试过ssh user @ ipAddress \ npassword。它似乎没有用。
我不能使用任何外部工具,如ssh-agent或期望。我无法控制服务器A.
有没有办法可以提供密码作为参数或输入密码?
谢谢!
答案 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