用于连接服务器的ssh脚本

时间:2015-06-19 01:43:16

标签: bash ssh expect

我有这个连接到服务器的基本脚本file.sh

name=username
routerip=172.21.200.37

echo "$name""@""$routerip"
ssh "$name""@""$routerip"

示例输出:

$ ./file.sh
username@172.21.200.37
username@172.21.200.37's password:

我想知道的是如何最好地处理我脚本中请求的密码。我应该使用expect吗?还是有另一种方式。此外,如果密码在脚本中,是否应加密以确保安全性?

也许是一个愚蠢的问题,但有没有办法连接到服务器有一个用户名?

2 个答案:

答案 0 :(得分:0)

如果您关心安全性,那么您肯定不想在脚本中嵌入密码。你无法真正加密"密码也是,因为脚本必须知道如何解密它,任何阅读脚本的人都会看到你是如何做到的(以及解密密钥是什么等)。

如果你有权在机器A上运行一个有权登录机器B的脚本,我一直这样做的方法是在机器A上设置一个私有ssh密钥,并将公钥放入机器B上用户的authorized_keys文件。

(回答你的上一个问题,不,如果没有用户名,就无法进行此类登录。)

答案 1 :(得分:0)

我同意@Steve Summit的看法,如果机器B具有机器A的公钥,则只需提供用户名即可登录。您不需要输入密码。

使用以下简单脚本解决您的问题

USERNAME=myUsername
GRID=$1
SERVER=$2

echo "=================== Connecting ==================="
if [ ${GRID} == 'dev' ] && [ ${SERVER} == 'uk' ]
then
        ssh -l ${USERNAME} "dev-uk.xyz.com"

elif [ ${GRID} == 'dev' ] && [ ${SERVER} == 'us' ]
then
        ssh -l ${USERNAME} "dev-us.xyz.com"

else
ssh -l ${USERNAME} ${GRID}"-"${SERVER}".xyz.com"
fi

因此,在连接时,您只需要运行

./file.sh dev uk

./file.sh qa jer