bash脚本SSH到一台机器,而不会提示密码,而无需使用钥匙(Bash Script to SSH

2019-07-03 16:58发布

我意识到这个问题已经被问了几次,但我不能在我的搜索地方找到相关的答案。

我在开发环境中工作,其中安全性是不是一个问题,任何人都可能只是猜测密码,如果想了几秒钟。

我所试图做的是简单的。 我在本地.bashrc文件创建一个别名功能,我想这个功能自动登录到一台具有默认密码。

我目前的实施看起来是这样的:

function s () { 
 ssh root@192.168.1.$1
}

当我运行它,我得到这样的:

~]s 122

ssh root@192.168.1.122

root@192.168.1.122's password: 

使用bash,而不是使用RSA密钥我想获得这个使用默认密码“密码”。

我已经试过其中IP和用户已设置如下。

Do=$(expect -c "
spawn ssh $User@${IP[0]}.${IP[1]}.${IP[2]}.${IP[3]} 
expect \"yes/no\" 
send \"yes\r\" 
expect \"assword\" send \"password\"")
echo $Do
$Do

它给人的follwing错误:

Connecting and logging into server using expect
usage: send [args] string
    while executing
"send"
    invoked from within
"expect "assword" send "password""
 Administrator@192.168.1.176's password:
bash: spawn: command not found...

使用下面的命令,我可以连接一台机器。 如果删除了互动它只运行uptime命令并关闭连接。 随着交互命令我无法看到我打字或实际与机器交互。 有任何想法吗?

Do=$(expect -c "spawn ssh $User@${IP[0]}.${IP[1]}.${IP[2]}.${IP[3]}; set timeout 4; expect \"assword\"; send \"password\n\"; expect \"test\"; send \"uptime\n\"; interact;");echo $Do;

Answer 1:

你可以用做这个expect工具: http://expect.sourceforge.net/

它的广泛使用,所以根据你的系统,相当于sudo apt-get install expectyum install expect将安装它。

下面是一个示例expect使用ssh脚本。 这将记录你在,让您的交互提示的控制:

#!/usr/bin/expect

set login "root"
set addr "127.0.0.1"
set pw "password"

spawn ssh $login@$addr
expect "$login@$addr\'s password:"
send "$pw\r"
expect "#"
send "cd /developer\r"
interact

下面是如何使用的例子expect作为一个bash脚本的一部分。 此登录用SSH,CD到/ var,运行脚本,然后退出SSH会话。

#!/bin/bash
...

login_via_ssh_and_do_stuff() {

    # build the expect script in bash

    expect_sh=$(expect -c "
    spawn ssh root@127.0.0.1
    expect \"password:\"
    send \"password\r\"
    expect \"#\"
    send \"cd /var\r\"
    expect \"#\"
    send \"chmod +x my_script.sh\r\"
    expect \"#\"
    send \"./my_script.sh\r\"
    expect \"#\"
    send \"exit\r\"
    ")

    # run the expect script
    echo "$expect_sh"
}

您可以留下一个脚本,这些片段在本地系统上,然后只需别名的脚本。

另外:我知道你说的安全性是不是一个问题,但我想只要注意,再次,认为“正确”的方式,而无需使用密码SSH是使用SSH密钥对=)



Answer 2:

使用sshpass这是包库可在主要的Linux-ES。

例如,当密码是在password.txt文件:

sshpass -fpassword.txt ssh username@hostname

sshpass运行ssh在一个专用的tty ,欺骗它,以为它是从一个交互式用户获取密码。



文章来源: Bash Script to SSH into a machine without prompting password and without using keys
标签: bash ssh